input grammar: cplusplus.y
State 0 conflicts: 41 shift/reduce, 3 reduce/reduce State 2 conflicts: 39 shift/reduce, 3 reduce/reduce State 4 conflicts: 1 reduce/reduce State 10 conflicts: 1 shift/reduce State 22 conflicts: 3 shift/reduce, 1 reduce/reduce State 23 conflicts: 1 shift/reduce State 25 conflicts: 1 shift/reduce State 50 conflicts: 36 shift/reduce, 3 reduce/reduce State 51 conflicts: 8 shift/reduce, 5 reduce/reduce State 54 conflicts: 3 shift/reduce State 58 conflicts: 3 shift/reduce, 2 reduce/reduce State 59 conflicts: 3 shift/reduce State 61 conflicts: 40 shift/reduce, 3 reduce/reduce State 63 conflicts: 1 shift/reduce State 75 conflicts: 1 reduce/reduce State 89 conflicts: 1 shift/reduce, 1 reduce/reduce State 96 conflicts: 100 reduce/reduce State 101 conflicts: 39 shift/reduce, 3 reduce/reduce State 115 conflicts: 39 shift/reduce, 3 reduce/reduce State 117 conflicts: 61 reduce/reduce State 119 conflicts: 39 shift/reduce, 3 reduce/reduce State 120 conflicts: 5 shift/reduce, 1 reduce/reduce State 122 conflicts: 1 shift/reduce State 125 conflicts: 1 shift/reduce State 130 conflicts: 2 shift/reduce State 133 conflicts: 1 shift/reduce, 1 reduce/reduce State 135 conflicts: 2 shift/reduce State 136 conflicts: 40 shift/reduce, 3 reduce/reduce State 138 conflicts: 1 shift/reduce State 142 conflicts: 1 shift/reduce State 147 conflicts: 2 shift/reduce State 148 conflicts: 39 shift/reduce, 3 reduce/reduce State 153 conflicts: 3 shift/reduce State 159 conflicts: 3 shift/reduce State 168 conflicts: 2 shift/reduce State 169 conflicts: 3 shift/reduce State 172 conflicts: 1 shift/reduce, 1 reduce/reduce State 173 conflicts: 1 shift/reduce State 175 conflicts: 3 shift/reduce State 176 conflicts: 3 shift/reduce, 1 reduce/reduce State 178 conflicts: 1 shift/reduce State 179 conflicts: 1 shift/reduce State 180 conflicts: 1 reduce/reduce State 181 conflicts: 2 shift/reduce State 187 conflicts: 1 shift/reduce State 191 conflicts: 1 shift/reduce State 196 conflicts: 39 shift/reduce, 3 reduce/reduce State 199 conflicts: 1 shift/reduce State 201 conflicts: 100 reduce/reduce State 203 conflicts: 1 shift/reduce State 208 conflicts: 2 shift/reduce State 214 conflicts: 39 shift/reduce, 3 reduce/reduce State 219 conflicts: 39 shift/reduce, 3 reduce/reduce State 226 conflicts: 1 shift/reduce State 228 conflicts: 1 shift/reduce State 229 conflicts: 1 shift/reduce State 233 conflicts: 1 shift/reduce State 238 conflicts: 2 reduce/reduce State 245 conflicts: 2 shift/reduce State 247 conflicts: 1 shift/reduce State 248 conflicts: 2 shift/reduce State 251 conflicts: 2 shift/reduce State 256 conflicts: 2 shift/reduce State 257 conflicts: 2 shift/reduce State 258 conflicts: 2 shift/reduce State 265 conflicts: 2 shift/reduce State 266 conflicts: 2 shift/reduce State 271 conflicts: 2 shift/reduce State 293 conflicts: 2 shift/reduce State 295 conflicts: 1 shift/reduce State 297 conflicts: 1 shift/reduce State 299 conflicts: 1 shift/reduce, 1 reduce/reduce State 302 conflicts: 1 shift/reduce State 308 conflicts: 1 shift/reduce State 311 conflicts: 1 reduce/reduce State 313 conflicts: 1 shift/reduce, 97 reduce/reduce State 318 conflicts: 2 shift/reduce State 338 conflicts: 1 shift/reduce State 344 conflicts: 1 shift/reduce State 345 conflicts: 1 shift/reduce State 346 conflicts: 2 shift/reduce State 347 conflicts: 1 shift/reduce State 349 conflicts: 2 shift/reduce State 352 conflicts: 2 shift/reduce State 353 conflicts: 4 shift/reduce State 356 conflicts: 1 shift/reduce State 363 conflicts: 1 shift/reduce State 366 conflicts: 2 shift/reduce State 375 conflicts: 5 shift/reduce, 2 reduce/reduce State 382 conflicts: 3 shift/reduce, 1 reduce/reduce State 396 conflicts: 2 shift/reduce State 397 conflicts: 2 shift/reduce State 398 conflicts: 2 shift/reduce State 405 conflicts: 3 shift/reduce State 412 conflicts: 1 shift/reduce State 416 conflicts: 1 shift/reduce State 421 conflicts: 2 shift/reduce State 424 conflicts: 3 shift/reduce State 426 conflicts: 3 reduce/reduce State 427 conflicts: 1 shift/reduce State 432 conflicts: 24 shift/reduce, 3 reduce/reduce State 433 conflicts: 2 shift/reduce, 1 reduce/reduce State 434 conflicts: 1 shift/reduce State 438 conflicts: 5 shift/reduce, 1 reduce/reduce State 441 conflicts: 2 shift/reduce State 442 conflicts: 1 shift/reduce State 443 conflicts: 5 shift/reduce, 1 reduce/reduce State 450 conflicts: 1 shift/reduce State 451 conflicts: 2 shift/reduce State 456 conflicts: 2 shift/reduce State 458 conflicts: 32 shift/reduce State 464 conflicts: 1 shift/reduce State 498 conflicts: 1 shift/reduce State 513 conflicts: 1 shift/reduce State 518 conflicts: 1 shift/reduce State 520 conflicts: 6 shift/reduce State 525 conflicts: 100 reduce/reduce State 530 conflicts: 2 shift/reduce State 531 conflicts: 2 shift/reduce State 532 conflicts: 2 shift/reduce State 533 conflicts: 2 shift/reduce State 534 conflicts: 2 shift/reduce State 538 conflicts: 2 shift/reduce State 540 conflicts: 2 shift/reduce State 543 conflicts: 2 shift/reduce State 544 conflicts: 1 shift/reduce State 545 conflicts: 2 shift/reduce State 546 conflicts: 2 shift/reduce State 547 conflicts: 2 shift/reduce State 548 conflicts: 2 shift/reduce State 549 conflicts: 2 shift/reduce State 550 conflicts: 2 shift/reduce State 551 conflicts: 2 shift/reduce State 552 conflicts: 2 shift/reduce State 554 conflicts: 2 shift/reduce State 556 conflicts: 5 shift/reduce, 1 reduce/reduce State 561 conflicts: 2 shift/reduce State 562 conflicts: 2 shift/reduce State 574 conflicts: 2 shift/reduce State 575 conflicts: 2 shift/reduce State 576 conflicts: 2 shift/reduce State 577 conflicts: 2 shift/reduce State 578 conflicts: 2 shift/reduce State 579 conflicts: 2 shift/reduce State 581 conflicts: 2 shift/reduce State 582 conflicts: 2 shift/reduce State 583 conflicts: 2 shift/reduce State 584 conflicts: 2 shift/reduce State 585 conflicts: 2 shift/reduce State 590 conflicts: 2 shift/reduce State 591 conflicts: 2 shift/reduce State 592 conflicts: 2 shift/reduce State 593 conflicts: 2 shift/reduce State 594 conflicts: 2 shift/reduce State 595 conflicts: 2 shift/reduce State 596 conflicts: 2 shift/reduce State 600 conflicts: 2 shift/reduce State 616 conflicts: 39 shift/reduce, 3 reduce/reduce State 628 conflicts: 2 shift/reduce State 638 conflicts: 4 shift/reduce State 645 conflicts: 2 shift/reduce State 647 conflicts: 3 shift/reduce, 1 reduce/reduce State 648 conflicts: 3 shift/reduce State 649 conflicts: 1 shift/reduce State 652 conflicts: 1 shift/reduce State 658 conflicts: 2 reduce/reduce State 661 conflicts: 1 shift/reduce State 674 conflicts: 2 shift/reduce State 675 conflicts: 1 shift/reduce State 680 conflicts: 2 shift/reduce State 683 conflicts: 2 shift/reduce State 695 conflicts: 2 shift/reduce State 696 conflicts: 1 shift/reduce State 698 conflicts: 2 shift/reduce State 700 conflicts: 2 shift/reduce State 703 conflicts: 1 shift/reduce State 707 conflicts: 1 reduce/reduce State 709 conflicts: 1 shift/reduce State 711 conflicts: 2 shift/reduce, 1 reduce/reduce State 714 conflicts: 5 shift/reduce State 721 conflicts: 2 shift/reduce State 723 conflicts: 2 shift/reduce State 725 conflicts: 3 shift/reduce, 2 reduce/reduce State 726 conflicts: 1 shift/reduce State 761 conflicts: 2 shift/reduce State 764 conflicts: 2 shift/reduce State 770 conflicts: 1 shift/reduce State 771 conflicts: 1 shift/reduce State 777 conflicts: 2 shift/reduce State 778 conflicts: 100 reduce/reduce State 781 conflicts: 6 shift/reduce State 783 conflicts: 2 shift/reduce State 794 conflicts: 2 shift/reduce State 796 conflicts: 2 shift/reduce State 798 conflicts: 2 shift/reduce State 810 conflicts: 1 shift/reduce State 813 conflicts: 37 shift/reduce, 3 reduce/reduce State 823 conflicts: 1 reduce/reduce State 824 conflicts: 1 shift/reduce State 842 conflicts: 1 reduce/reduce State 848 conflicts: 39 shift/reduce, 3 reduce/reduce State 868 conflicts: 1 shift/reduce State 883 conflicts: 1 reduce/reduce State 885 conflicts: 2 shift/reduce, 2 reduce/reduce State 894 conflicts: 1 shift/reduce, 1 reduce/reduce State 901 conflicts: 2 shift/reduce State 906 conflicts: 2 shift/reduce State 926 conflicts: 1 shift/reduce State 927 conflicts: 2 shift/reduce State 929 conflicts: 2 shift/reduce State 936 conflicts: 4 shift/reduce State 939 conflicts: 5 shift/reduce State 945 conflicts: 1 shift/reduce State 955 conflicts: 1 shift/reduce State 963 conflicts: 1 shift/reduce State 964 conflicts: 2 shift/reduce State 965 conflicts: 2 shift/reduce State 970 conflicts: 2 shift/reduce State 982 conflicts: 2 shift/reduce State 984 conflicts: 2 shift/reduce State 985 conflicts: 1 shift/reduce State 986 conflicts: 3 shift/reduce State 987 conflicts: 2 shift/reduce State 989 conflicts: 2 shift/reduce State 992 conflicts: 36 shift/reduce, 3 reduce/reduce State 993 conflicts: 2 shift/reduce State 998 conflicts: 37 shift/reduce, 3 reduce/reduce State 1001 conflicts: 2 shift/reduce State 1009 conflicts: 39 shift/reduce, 3 reduce/reduce State 1029 conflicts: 1 reduce/reduce State 1039 conflicts: 1 shift/reduce State 1045 conflicts: 3 shift/reduce State 1048 conflicts: 1 shift/reduce State 1050 conflicts: 1 shift/reduce State 1051 conflicts: 1 shift/reduce State 1071 conflicts: 4 shift/reduce State 1072 conflicts: 2 shift/reduce State 1073 conflicts: 2 shift/reduce State 1077 conflicts: 2 shift/reduce State 1080 conflicts: 1 shift/reduce, 1 reduce/reduce State 1083 conflicts: 27 shift/reduce, 3 reduce/reduce State 1088 conflicts: 2 shift/reduce State 1089 conflicts: 2 shift/reduce State 1090 conflicts: 2 shift/reduce State 1091 conflicts: 2 shift/reduce State 1096 conflicts: 2 shift/reduce State 1100 conflicts: 2 shift/reduce State 1104 conflicts: 3 shift/reduce State 1106 conflicts: 2 shift/reduce State 1111 conflicts: 2 reduce/reduce State 1112 conflicts: 1 shift/reduce State 1113 conflicts: 2 shift/reduce State 1117 conflicts: 37 shift/reduce, 3 reduce/reduce State 1121 conflicts: 2 shift/reduce State 1123 conflicts: 2 shift/reduce State 1158 conflicts: 2 shift/reduce State 1160 conflicts: 1 shift/reduce State 1163 conflicts: 2 shift/reduce State 1167 conflicts: 1 shift/reduce, 2 reduce/reduce State 1176 conflicts: 39 shift/reduce, 3 reduce/reduce State 1189 conflicts: 1 shift/reduce State 1192 conflicts: 2 shift/reduce State 1197 conflicts: 37 shift/reduce, 3 reduce/reduce State 1202 conflicts: 37 shift/reduce, 3 reduce/reduce State 1204 conflicts: 19 shift/reduce, 3 reduce/reduce State 1206 conflicts: 37 shift/reduce, 39 reduce/reduce State 1216 conflicts: 69 shift/reduce, 41 reduce/reduce State 1238 conflicts: 1 shift/reduce State 1239 conflicts: 1 shift/reduce State 1257 conflicts: 2 shift/reduce State 1263 conflicts: 2 shift/reduce State 1265 conflicts: 19 shift/reduce, 39 reduce/reduce State 1270 conflicts: 37 shift/reduce, 3 reduce/reduce State 1271 conflicts: 69 shift/reduce, 41 reduce/reduce State 1274 conflicts: 19 shift/reduce, 3 reduce/reduce State 1283 conflicts: 1 shift/reduce State 1286 conflicts: 1 shift/reduce State 1289 conflicts: 1 shift/reduce State 1291 conflicts: 3 shift/reduce State 1292 conflicts: 37 shift/reduce, 3 reduce/reduce State 1293 conflicts: 2 shift/reduce State 1296 conflicts: 2 shift/reduce State 1299 conflicts: 19 shift/reduce, 3 reduce/reduce State 1300 conflicts: 1 shift/reduce State 1303 conflicts: 2 shift/reduce State 1307 conflicts: 1 shift/reduce State 1311 conflicts: 2 shift/reduce State 1312 conflicts: 3 shift/reduce State 1313 conflicts: 2 shift/reduce State 1315 conflicts: 37 shift/reduce, 3 reduce/reduce State 1316 conflicts: 37 shift/reduce, 3 reduce/reduce State 1317 conflicts: 4 shift/reduce State 1322 conflicts: 1 reduce/reduce State 1323 conflicts: 1 reduce/reduce State 1328 conflicts: 37 shift/reduce, 3 reduce/reduce State 1335 conflicts: 37 shift/reduce, 3 reduce/reduce State 1337 conflicts: 37 shift/reduce, 3 reduce/reduce State 1338 conflicts: 1 shift/reduce State 1342 conflicts: 37 shift/reduce, 3 reduce/reduce
0 $accept → result $end 1 COMMA-opt → %empty 2 | "," 3 CONSTEXPR-opt → %empty 4 | "constexpr" 5 ELLIPSIS-opt → %empty 6 | "..." 7 EXPORT-opt → %empty 8 | "export" 9 EXTERN-opt → %empty 10 | "extern" 11 IDENTIFIER-opt → %empty 12 | IDENTIFIER 13 INLINE-opt → %empty 14 | "inline" 15 NOEXCEPT-opt → %empty 16 | "noexcept" 17 NOT-opt → %empty 18 | "!" 19 SCOPE-opt → %empty 20 | "::" 21 TEMPLATE-opt → %empty 22 | "template" 23 THIS-opt → %empty 24 | "this" 25 TYPENAME-opt → %empty 26 | "typename" 27 VIRTUAL-opt → %empty 28 | "virtual" 29 abstract-declarator → ptr-abstract-declarator 30 | noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | abstract-pack-declarator 32 abstract-declarator-opt → %empty 33 | abstract-declarator 34 abstract-pack-declarator → noptr-abstract-pack-declarator 35 | ptr-operator abstract-pack-declarator 36 access-specifier → "private" 37 | "protected" 38 | "public" 39 access-specifier-opt → %empty 40 | access-specifier 41 additive-expression → multiplicative-expression 42 | additive-expression "+" multiplicative-expression 43 | additive-expression "-" multiplicative-expression 44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 45 alignment-specifier → "alignas" "(" type-id ELLIPSIS-opt ")" 46 | "alignas" "(" constant-expression ELLIPSIS-opt ")" 47 and-expression → equality-expression 48 | and-expression "&" equality-expression 49 asm-declaration → attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 50 assignment-expression → conditional-expression 51 | yield-expression 52 | throw-expression 53 | logical-or-expression assignment-operator initializer-clause 54 assignment-expression-opt → %empty 55 | assignment-expression 56 assignment-operator → "=" 57 | "*=" 58 | "/=" 59 | "%=" 60 | "+=" 61 | "-=" 62 | ">>=" 63 | "<<=" 64 | "&=" 65 | "^=" 66 | "|=" 67 attribute → attribute-token attribute-argument-clause-opt 68 attribute-argument-clause → "(" balanced-token-seq-opt ")" 69 attribute-argument-clause-opt → %empty 70 | attribute-argument-clause 71 attribute-declaration → attribute-specifier-seq ";" 72 attribute-list → attribute-opt 73 | attribute-list "," attribute-opt 74 | attribute "..." 75 | attribute-list "," attribute "..." 76 attribute-namespace → IDENTIFIER 77 attribute-opt → %empty 78 | attribute 79 attribute-scoped-token → attribute-namespace "::" IDENTIFIER 80 attribute-specifier → "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → %empty 84 | attribute-specifier-seq 85 attribute-token → IDENTIFIER 86 | attribute-scoped-token 87 attribute-using-prefix → "using" attribute-namespace ":" 88 attribute-using-prefix-opt → %empty 89 | attribute-using-prefix 90 await-expression → "co_await" cast-expression 91 balanced-token → "(" balanced-token-seq-opt ")" 92 | "[" balanced-token-seq-opt "]" 93 | "{" balanced-token-seq-opt "}" 94 | BALANCED_TOKEN 95 balanced-token-seq → balanced-token 96 | balanced-token-seq balanced-token 97 balanced-token-seq-opt → %empty 98 | balanced-token-seq 99 base-clause → ":" base-specifier-list 100 base-clause-opt → %empty 101 | base-clause 102 base-specifier → attribute-specifier-seq-opt class-or-decltype 103 | attribute-specifier-seq-opt "virtual" access-specifier-opt class-or-decltype 104 | attribute-specifier-seq-opt access-specifier VIRTUAL-opt class-or-decltype 105 base-specifier-list → base-specifier ELLIPSIS-opt 106 | base-specifier-list "," base-specifier ELLIPSIS-opt 107 block-declaration → simple-declaration 108 | asm-declaration 109 | namespace-alias-definition 110 | using-declaration 111 | using-enum-declaration 112 | using-directive 113 | static_assert-declaration 114 | alias-declaration 115 | opaque-enum-declaration 116 boolean-literal → BOOLEAN_LITERAL 117 brace-or-equal-initializer → "=" initializer-clause 118 | braced-init-list 119 brace-or-equal-initializer-opt → %empty 120 | brace-or-equal-initializer 121 braced-init-list → "{" initializer-list COMMA-opt "}" 122 | "{" designated-initializer-list COMMA-opt "}" 123 | "{" "}" 124 capture → simple-capture 125 | init-capture 126 capture-default → "&" 127 | "=" 128 capture-list → capture 129 | capture-list "," capture 130 cast-expression → unary-expression 131 | "(" type-id ")" cast-expression 132 character-literal → CHARACTER_LITERAL 133 class-head → class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | class-key attribute-specifier-seq-opt base-clause-opt 135 class-head-name → nested-name-specifier-opt class-name 136 class-key → "class" 137 | "struct" 138 | "union" 139 class-name → IDENTIFIER 140 | simple-template-id 141 class-or-decltype → nested-name-specifier-opt type-name 142 | nested-name-specifier "template" simple-template-id 143 | decltype-specifier 144 class-specifier → class-head "{" member-specification-opt "}" 145 class-virt-specifier → "final" 146 class-virt-specifier-opt → %empty 147 | class-virt-specifier 148 compare-expression → shift-expression 149 | compare-expression "<=>" shift-expression 150 compound-requirement → "{" expression "}" NOEXCEPT-opt return-type-requirement-opt ";" 151 compound-statement → "{" statement-seq-opt "}" 152 concept-definition → "concept" concept-name "=" constraint-expression ";" 153 concept-name → IDENTIFIER 154 condition → expression 155 | attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 156 condition-opt → %empty 157 | condition 158 conditional-expression → logical-or-expression 159 | logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → conditional-expression 161 constant-expression-opt → %empty 162 | constant-expression 163 constraint-expression → logical-or-expression 164 constraint-logical-and-expression → primary-expression 165 | constraint-logical-and-expression "&&" primary-expression 166 constraint-logical-or-expression → constraint-logical-and-expression 167 | constraint-logical-or-expression "||" constraint-logical-and-expression 168 conversion-declarator → ptr-operator conversion-declarator-opt 169 conversion-declarator-opt → %empty 170 | conversion-declarator 171 conversion-function-id → "operator" conversion-type-id 172 conversion-type-id → type-specifier-seq conversion-declarator-opt 173 coroutine-return-statement → "co_return" expr-or-braced-init-list-opt ";" 174 ctor-initializer → ":" mem-initializer-list 175 ctor-initializer-opt → %empty 176 | ctor-initializer 177 cv-qualifier → "const" 178 | "volatile" 179 cv-qualifier-seq → cv-qualifier cv-qualifier-seq-opt 180 cv-qualifier-seq-opt → %empty 181 | cv-qualifier-seq 182 decl-specifier → storage-class-specifier 183 | defining-type-specifier 184 | function-specifier 185 | "friend" 186 | "typedef" 187 | "constexpr" 188 | "consteval" 189 | "constinit" 190 | "inline" 191 decl-specifier-seq → decl-specifier attribute-specifier-seq-opt 192 | decl-specifier decl-specifier-seq 193 decl-specifier-seq-opt → %empty 194 | decl-specifier-seq 195 declaration → block-declaration 196 | nodeclspec-function-declaration 197 | function-definition 198 | template-declaration 199 | deduction-guide 200 | explicit-instantiation 201 | explicit-specialization 202 | export-declaration 203 | linkage-specification 204 | namespace-definition 205 | empty-declaration 206 | attribute-declaration 207 | module-import-declaration 208 declaration-seq → declaration 209 | declaration-seq declaration 210 declaration-seq-opt → %empty 211 | declaration-seq 212 declaration-statement → block-declaration 213 declarator → ptr-declarator 214 | noptr-declarator parameters-and-qualifiers trailing-return-type 215 declarator-id → ELLIPSIS-opt id-expression 216 decltype-specifier → "decltype" "(" expression ")" 217 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 218 defining-type-id → defining-type-specifier-seq abstract-declarator-opt 219 defining-type-specifier → type-specifier 220 | class-specifier 221 | enum-specifier 222 defining-type-specifier-seq → defining-type-specifier attribute-specifier-seq-opt 223 | defining-type-specifier defining-type-specifier-seq 224 delete-expression → SCOPE-opt "delete" cast-expression 225 | SCOPE-opt "delete" "[" "]" cast-expression 226 designated-initializer-clause → designator brace-or-equal-initializer 227 designated-initializer-list → designated-initializer-clause 228 | designated-initializer-list "," designated-initializer-clause 229 designator → "." IDENTIFIER 230 elaborated-enum-specifier → "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | class-key simple-template-id 233 | class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | elaborated-enum-specifier 235 empty-declaration → ";" 236 enclosing-namespace-specifier → IDENTIFIER 237 | enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER 238 enum-base → ":" type-specifier-seq 239 enum-base-opt → %empty 240 | enum-base 241 enum-head → enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 242 enum-head-name → nested-name-specifier-opt IDENTIFIER 243 enum-head-name-opt → %empty 244 | enum-head-name 245 enum-key → "enum" 246 | "enum" "class" 247 | "enum" "struct" 248 enum-name → IDENTIFIER 249 enum-specifier → enum-head "{" enumerator-list-opt "}" 250 | enum-head "{" enumerator-list "," "}" 251 enumerator → IDENTIFIER attribute-specifier-seq-opt 252 enumerator-definition → enumerator 253 | enumerator "=" constant-expression 254 enumerator-list → enumerator-definition 255 | enumerator-list "," enumerator-definition 256 enumerator-list-opt → %empty 257 | enumerator-list 258 equality-expression → relational-expression 259 | equality-expression "==" relational-expression 260 | equality-expression "!=" relational-expression 261 exception-declaration → attribute-specifier-seq-opt type-specifier-seq declarator 262 | attribute-specifier-seq-opt type-specifier-seq abstract-declarator-opt 263 | "..." 264 exclusive-or-expression → and-expression 265 | exclusive-or-expression "^" and-expression 266 explicit-instantiation → EXTERN-opt "template" declaration 267 explicit-specialization → "template" "<" ">" declaration 268 explicit-specifier → "explicit" "(" constant-expression ")" 269 | "explicit" 270 explicit-specifier-opt → %empty 271 | explicit-specifier 272 export-declaration → "export" declaration 273 | "export" "{" declaration-seq-opt "}" 274 | "export" module-import-declaration 275 expr-or-braced-init-list → expression 276 | braced-init-list 277 expr-or-braced-init-list-opt → %empty 278 | expr-or-braced-init-list 279 expression → assignment-expression 280 | expression "," assignment-expression 281 expression-list → initializer-list 282 expression-list-opt → %empty 283 | expression-list 284 expression-opt → %empty 285 | expression 286 expression-statement → expression-opt ";" 287 floating-point-literal → FLOATING_POINT_LITERAL 288 fold-expression → "(" cast-expression fold-operator "..." ")" 289 | "(" "..." fold-operator cast-expression ")" 290 | "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 291 fold-operator → "+" 292 | "-" 293 | "*" 294 | "/" 295 | "%" 296 | "^" 297 | "&" 298 | "|" 299 | "<<" 300 | ">>" 301 | "+=" 302 | "-=" 303 | "*=" 304 | "/=" 305 | "%=" 306 | "^=" 307 | "&=" 308 | "|=" 309 | "<<=" 310 | ">>=" 311 | "=" 312 | "==" 313 | "!=" 314 | "<" 315 | ">" 316 | "<=" 317 | ">=" 318 | "&&" 319 | "||" 320 | "," 321 | ".*" 322 | "->*" 323 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq declarator 324 | attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" 325 for-range-initializer → expr-or-braced-init-list 326 function-body → ctor-initializer-opt compound-statement 327 | function-try-block 328 | "=" "default" ";" 329 | "=" "delete" ";" 330 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → "virtual" 333 | explicit-specifier 334 function-try-block → "try" ctor-initializer-opt compound-statement handler-seq 335 global-module-fragment → "module" ";" declaration-seq-opt 336 global-module-fragment-opt → %empty 337 | global-module-fragment 338 handler → "catch" "(" exception-declaration ")" compound-statement 339 handler-seq → handler handler-seq-opt 340 handler-seq-opt → %empty 341 | handler-seq 342 header-name → HEADER_NAME 343 id-expression → unqualified-id 344 | qualified-id 345 identifier-list → IDENTIFIER 346 | identifier-list "," IDENTIFIER 347 inclusive-or-expression → exclusive-or-expression 348 | inclusive-or-expression "|" exclusive-or-expression 349 init-capture → ELLIPSIS-opt IDENTIFIER initializer 350 | "&" ELLIPSIS-opt IDENTIFIER initializer 351 init-declarator → declarator initializer-opt 352 | declarator requires-clause 353 init-declarator-list → init-declarator 354 | init-declarator-list "," init-declarator 355 init-declarator-list-opt → %empty 356 | init-declarator-list 357 init-statement → expression-statement 358 | simple-declaration 359 | alias-declaration 360 init-statement-opt → %empty 361 | init-statement 362 initializer → brace-or-equal-initializer 363 | "(" expression-list ")" 364 initializer-clause → assignment-expression 365 | braced-init-list 366 initializer-list → initializer-clause ELLIPSIS-opt 367 | initializer-list "," initializer-clause ELLIPSIS-opt 368 initializer-opt → %empty 369 | initializer 370 integer-literal → INTEGER_LITERAL 371 iteration-statement → "while" "(" condition ")" statement 372 | "do" statement "while" "(" expression ")" ";" 373 | "for" "(" init-statement condition-opt ";" expression-opt ")" statement 374 | "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" statement 375 jump-statement → "break" ";" 376 | "continue" ";" 377 | "return" expr-or-braced-init-list-opt ";" 378 | coroutine-return-statement 379 | "goto" IDENTIFIER ";" 380 labeled-statement → attribute-specifier-seq-opt IDENTIFIER ":" statement 381 | attribute-specifier-seq-opt "case" constant-expression ":" statement 382 | attribute-specifier-seq-opt "default" ":" statement 383 lambda-capture → capture-default 384 | capture-list 385 | capture-default "," capture-list 386 lambda-capture-opt → %empty 387 | lambda-capture 388 lambda-declarator → lambda-specifiers 389 | "(" parameter-declaration-clause ")" lambda-specifiers requires-clause-opt 390 lambda-expression → lambda-introducer lambda-declarator compound-statement 391 | lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → "[" lambda-capture-opt "]" 393 lambda-specifiers → decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 394 linkage-specification → "extern" string-literal "{" declaration-seq-opt "}" 395 | "extern" string-literal declaration 396 literal → integer-literal 397 | character-literal 398 | floating-point-literal 399 | string-literal 400 | boolean-literal 401 | pointer-literal 402 | user-defined-literal 403 literal-operator-id → "operator" string-literal IDENTIFIER 404 | "operator" user-defined-string-literal 405 logical-and-expression → inclusive-or-expression 406 | logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → logical-and-expression 408 | logical-or-expression "||" logical-and-expression 409 mem-initializer → mem-initializer-id "(" expression-list-opt ")" 410 | mem-initializer-id braced-init-list 411 mem-initializer-id → class-or-decltype 412 | IDENTIFIER 413 mem-initializer-list → mem-initializer ELLIPSIS-opt 414 | mem-initializer-list "," mem-initializer ELLIPSIS-opt 415 member-declaration → attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" 416 | function-definition 417 | using-declaration 418 | using-enum-declaration 419 | static_assert-declaration 420 | template-declaration 421 | explicit-specialization 422 | deduction-guide 423 | alias-declaration 424 | opaque-enum-declaration 425 | empty-declaration 426 member-declarator → declarator virt-specifier-seq-opt pure-specifier-opt 427 | declarator requires-clause 428 | declarator brace-or-equal-initializer-opt 429 | IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt 430 member-declarator-list → member-declarator 431 | member-declarator-list "," member-declarator 432 member-declarator-list-opt → %empty 433 | member-declarator-list 434 member-specification → member-declaration member-specification-opt 435 | access-specifier ":" member-specification-opt 436 member-specification-opt → %empty 437 | member-specification 438 module-declaration → EXPORT-opt "module" module-name module-partition-opt attribute-specifier-seq-opt ";" 439 module-import-declaration → "import" module-name attribute-specifier-seq-opt ";" 440 | "import" module-partition attribute-specifier-seq-opt ";" 441 | "import" header-name attribute-specifier-seq-opt ";" 442 module-name → module-name-qualifier-opt IDENTIFIER 443 module-name-qualifier → IDENTIFIER "." 444 | module-name-qualifier IDENTIFIER "." 445 module-name-qualifier-opt → %empty 446 | module-name-qualifier 447 module-partition → ":" module-name-qualifier-opt IDENTIFIER 448 module-partition-opt → %empty 449 | module-partition 450 multiplicative-expression → pm-expression 451 | multiplicative-expression "*" pm-expression 452 | multiplicative-expression "/" pm-expression 453 | multiplicative-expression "%" pm-expression 454 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → IDENTIFIER 456 namespace-alias-definition → "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 457 namespace-body → declaration-seq-opt 458 namespace-definition → named-namespace-definition 459 | unnamed-namespace-definition 460 | nested-namespace-definition 461 namespace-name → IDENTIFIER 462 | namespace-alias 463 nested-name-specifier → "::" 464 | type-name "::" 465 | namespace-name "::" 466 | decltype-specifier "::" 467 | nested-name-specifier IDENTIFIER "::" 468 | nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → %empty 470 | nested-name-specifier 471 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 472 nested-requirement → "requires" constraint-expression ";" 473 new-declarator → ptr-operator new-declarator-opt 474 | noptr-new-declarator 475 new-declarator-opt → %empty 476 | new-declarator 477 new-expression → SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 479 new-initializer → "(" expression-list-opt ")" 480 | braced-init-list 481 new-initializer-opt → %empty 482 | new-initializer 483 new-placement → "(" expression-list ")" 484 new-placement-opt → %empty 485 | new-placement 486 new-type-id → type-specifier-seq new-declarator-opt 487 nodeclspec-function-declaration → attribute-specifier-seq-opt declarator ";" 488 noexcept-expression → "noexcept" "(" expression ")" 489 noexcept-specifier → "noexcept" "(" constant-expression ")" 490 | "noexcept" 491 noexcept-specifier-opt → %empty 492 | noexcept-specifier 493 noptr-abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers 494 | noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 495 | "(" ptr-abstract-declarator ")" 496 noptr-abstract-declarator-opt → %empty 497 | noptr-abstract-declarator 498 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator parameters-and-qualifiers 499 | noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 500 | "..." 501 noptr-declarator → declarator-id attribute-specifier-seq-opt 502 | noptr-declarator parameters-and-qualifiers 503 | noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | "(" ptr-declarator ")" 505 noptr-new-declarator → "[" expression-opt "]" attribute-specifier-seq-opt 506 | noptr-new-declarator "[" constant-expression "]" attribute-specifier-seq-opt 507 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 508 operator-function-id → "operator" overloadable-operator 509 | "operator" overloadable-operator "<" template-argument-list-opt ">" 510 overloadable-operator → "new" 511 | "delete" 512 | "new" "[" "]" 513 | "delete" "[" "]" 514 | "co_await" 515 | "(" ")" 516 | "[" "]" 517 | "->" 518 | "->*" 519 | "~" 520 | "!" 521 | "+" 522 | "-" 523 | "*" 524 | "/" 525 | "%" 526 | "^" 527 | "&" 528 | "|" 529 | "=" 530 | "+=" 531 | "-=" 532 | "*=" 533 | "/=" 534 | "%=" 535 | "^=" 536 | "&=" 537 | "|=" 538 | "==" 539 | "!=" 540 | "<" 541 | ">" 542 | "<=" 543 | ">=" 544 | "<=>" 545 | "&&" 546 | "||" 547 | "<<" 548 | ">>" 549 | "<<=" 550 | ">>=" 551 | "++" 552 | "--" 553 | "," 554 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 555 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 556 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 557 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 558 parameter-declaration-clause → parameter-declaration-list-opt ELLIPSIS-opt 559 | parameter-declaration-list "," "..." 560 parameter-declaration-list → parameter-declaration 561 | parameter-declaration-list "," parameter-declaration 562 parameter-declaration-list-opt → %empty 563 | parameter-declaration-list 564 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt 565 placeholder-type-specifier → type-constraint-opt "auto" 566 | type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → cast-expression 568 | pm-expression ".*" cast-expression 569 | pm-expression "->*" cast-expression 570 pointer-literal → POINTER_LITERAL 571 postfix-expression → primary-expression 572 | postfix-expression "[" expression-list-opt "]" 573 | postfix-expression "(" expression-list-opt ")" 574 | simple-type-specifier "(" expression-list-opt ")" 575 | typename-specifier "(" expression-list-opt ")" 576 | simple-type-specifier braced-init-list 577 | typename-specifier braced-init-list 578 | postfix-expression "." TEMPLATE-opt id-expression 579 | postfix-expression "->" TEMPLATE-opt id-expression 580 | postfix-expression "++" 581 | postfix-expression "--" 582 | "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | "static_cast" "<" type-id ">" "(" expression ")" 584 | "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | "const_cast" "<" type-id ">" "(" expression ")" 586 | "typeid" "(" expression ")" 587 | "typeid" "(" type-id ")" 588 primary-expression → literal 589 | string-literal 590 | "this" 591 | "(" expression ")" 592 | id-expression 593 | lambda-expression 594 | fold-expression 595 | requires-expression 596 private-module-fragment → "module" ":" "private" ";" declaration-seq-opt 597 private-module-fragment-opt → %empty 598 | private-module-fragment 599 ptr-abstract-declarator → noptr-abstract-declarator 600 | ptr-operator ptr-abstract-declarator-opt 601 ptr-abstract-declarator-opt → %empty 602 | ptr-abstract-declarator 603 ptr-declarator → noptr-declarator 604 | ptr-operator ptr-declarator 605 ptr-operator → "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | "&" attribute-specifier-seq-opt 607 | "&&" attribute-specifier-seq-opt 608 | nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 609 pure-specifier → "=" INTEGER_LITERAL 610 pure-specifier-opt → %empty 611 | pure-specifier 612 qualified-id → nested-name-specifier TEMPLATE-opt unqualified-id 613 qualified-namespace-specifier → nested-name-specifier-opt namespace-name 614 ref-qualifier → "&" 615 | "&&" 616 ref-qualifier-opt → %empty 617 | ref-qualifier 618 relational-expression → compare-expression 619 | relational-expression "<" compare-expression 620 | relational-expression ">" compare-expression 621 | relational-expression "<=" compare-expression 622 | relational-expression ">=" compare-expression 623 requirement → simple-requirement 624 | type-requirement 625 | compound-requirement 626 | nested-requirement 627 requirement-body → "{" requirement-seq "}" 628 requirement-parameter-list → "(" parameter-declaration-clause ")" 629 requirement-parameter-list-opt → %empty 630 | requirement-parameter-list 631 requirement-seq → requirement 632 | requirement-seq requirement 633 requires-clause → "requires" constraint-logical-or-expression 634 requires-clause-opt → %empty 635 | requires-clause 636 requires-expression → "requires" requirement-parameter-list-opt requirement-body 637 return-type-requirement → "->" type-constraint 638 return-type-requirement-opt → %empty 639 | return-type-requirement 640 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement 641 | "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" statement 642 | "if" NOT-opt "consteval" compound-statement 643 | "if" NOT-opt "consteval" compound-statement "else" statement 644 | "switch" "(" init-statement-opt condition ")" statement 645 shift-expression → additive-expression 646 | shift-expression "<<" additive-expression 647 | shift-expression ">>" additive-expression 648 simple-capture → IDENTIFIER ELLIPSIS-opt 649 | "&" IDENTIFIER ELLIPSIS-opt 650 | "this" 651 | "*" "this" 652 simple-declaration → decl-specifier-seq init-declarator-list-opt ";" 653 | attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 655 simple-requirement → expression ";" 656 simple-template-id → template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → nested-name-specifier-opt type-name 658 | nested-name-specifier "template" simple-template-id 659 | decltype-specifier 660 | placeholder-type-specifier 661 | nested-name-specifier-opt template-name 662 | "char" 663 | "char8_t" 664 | "char16_t" 665 | "char32_t" 666 | "wchar_t" 667 | "bool" 668 | "short" 669 | "int" 670 | "long" 671 | "signed" 672 | "unsigned" 673 | "float" 674 | "double" 675 | "void" 676 statement → labeled-statement 677 | attribute-specifier-seq-opt expression-statement 678 | attribute-specifier-seq-opt compound-statement 679 | attribute-specifier-seq-opt selection-statement 680 | attribute-specifier-seq-opt iteration-statement 681 | attribute-specifier-seq-opt jump-statement 682 | declaration-statement 683 | attribute-specifier-seq-opt try-block 684 statement-seq → statement 685 | statement-seq statement 686 statement-seq-opt → %empty 687 | statement-seq 688 static_assert-declaration → "static_assert" "(" constant-expression ")" ";" 689 | "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → "static" 691 | "thread_local" 692 | "extern" 693 | "mutable" 694 string-literal → STRING_LITERAL 695 template-argument → constant-expression 696 | type-id 697 | id-expression 698 template-argument-list → template-argument ELLIPSIS-opt 699 | template-argument-list "," template-argument ELLIPSIS-opt 700 template-argument-list-opt → %empty 701 | template-argument-list 702 template-declaration → template-head declaration 703 | template-head concept-definition 704 template-head → "template" "<" template-parameter-list ">" requires-clause-opt 705 template-id → simple-template-id 706 | operator-function-id "<" template-argument-list-opt ">" 707 | literal-operator-id "<" template-argument-list-opt ">" 708 template-name → IDENTIFIER 709 template-parameter → type-parameter 710 | parameter-declaration 711 template-parameter-list → template-parameter 712 | template-parameter-list "," template-parameter 713 throw-expression → "throw" assignment-expression-opt 714 trailing-return-type → "->" type-id 715 trailing-return-type-opt → %empty 716 | trailing-return-type 717 translation-unit → declaration-seq-opt 718 | global-module-fragment-opt module-declaration declaration-seq-opt private-module-fragment-opt 719 try-block → "try" compound-statement handler-seq 720 type-constraint → nested-name-specifier-opt concept-name 721 | nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → %empty 723 | type-constraint 724 type-id → type-specifier-seq abstract-declarator-opt 725 type-name → class-name 726 | enum-name 727 | typedef-name 728 type-parameter → type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 729 | type-parameter-key IDENTIFIER-opt "=" type-id 730 | type-constraint ELLIPSIS-opt IDENTIFIER-opt 731 | type-constraint IDENTIFIER-opt "=" type-id 732 | template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 733 | template-head type-parameter-key IDENTIFIER-opt "=" id-expression 734 type-parameter-key → "class" 735 | "typename" 736 type-requirement → "typename" nested-name-specifier-opt type-name ";" 737 type-specifier → simple-type-specifier 738 | elaborated-type-specifier 739 | typename-specifier 740 | cv-qualifier 741 type-specifier-seq → type-specifier attribute-specifier-seq-opt 742 | type-specifier type-specifier-seq 743 typedef-name → IDENTIFIER 744 | simple-template-id 745 typename-specifier → "typename" nested-name-specifier IDENTIFIER 746 | "typename" nested-name-specifier TEMPLATE-opt simple-template-id 747 ud-suffix → IDENTIFIER 748 unary-expression → postfix-expression 749 | unary-operator cast-expression 750 | "++" cast-expression 751 | "--" cast-expression 752 | await-expression 753 | "sizeof" unary-expression 754 | "sizeof" "(" type-id ")" 755 | "sizeof" "..." "(" IDENTIFIER ")" 756 | "alignof" "(" type-id ")" 757 | noexcept-expression 758 | new-expression 759 | delete-expression 760 unary-operator → "*" 761 | "&" 762 | "+" 763 | "-" 764 | "!" 765 | "~" 766 unnamed-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 767 unqualified-id → IDENTIFIER 768 | operator-function-id 769 | conversion-function-id 770 | literal-operator-id 771 | "~" type-name 772 | "~" decltype-specifier 773 | template-id 774 user-defined-character-literal → USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → user-defined-integer-literal 778 | user-defined-floating-point-literal 779 | user-defined-string-literal 780 | user-defined-character-literal 781 user-defined-string-literal → string-literal ud-suffix 782 using-declaration → "using" using-declarator-list ";" 783 using-declarator → TYPENAME-opt nested-name-specifier unqualified-id 784 using-declarator-list → using-declarator ELLIPSIS-opt 785 | using-declarator-list "," using-declarator ELLIPSIS-opt 786 using-directive → attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → "using" elaborated-enum-specifier ";" 788 virt-specifier → "override" 789 | "final" 790 virt-specifier-seq → virt-specifier 791 | virt-specifier-seq virt-specifier 792 virt-specifier-seq-opt → %empty 793 | virt-specifier-seq 794 yield-expression → "co_yield" assignment-expression 795 | "co_yield" braced-init-list 796 result → translation-unit
0 $accept → • result $end 9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 208 declaration-seq → • declaration 209 | • declaration-seq declaration 210 declaration-seq-opt → • %empty [$end] 211 | • declaration-seq 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 273 | • "export" "{" declaration-seq-opt "}" 274 | • "export" module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 335 global-module-fragment → • "module" ";" declaration-seq-opt 336 global-module-fragment-opt → • %empty ["export", "module"] 337 | • global-module-fragment 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 395 | • "extern" string-literal declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 717 translation-unit → • declaration-seq-opt 718 | • global-module-fragment-opt module-declaration declaration-seq-opt private-module-fragment-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" 796 result → • translation-unit "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "module" shift, and go to state 24 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 $end reduce using rule 210 (declaration-seq-opt) "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "export" [reduce using rule 336 (global-module-fragment-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "module" [reduce using rule 336 (global-module-fragment-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 62 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 global-module-fragment go to state 80 global-module-fragment-opt go to state 81 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 translation-unit go to state 103 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113 result go to state 114
187 decl-specifier → "constexpr" • $default reduce using rule 187 (decl-specifier)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 272 | "export" • declaration 273 | • "export" "{" declaration-seq-opt "}" 273 | "export" • "{" declaration-seq-opt "}" 274 | • "export" module-import-declaration 274 | "export" • module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 395 | • "extern" string-literal declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "{" shift, and go to state 115 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 116 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 117 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
10 EXTERN-opt → "extern" • ["template"] 394 linkage-specification → "extern" • string-literal "{" declaration-seq-opt "}" 395 | "extern" • string-literal declaration 692 storage-class-specifier → "extern" • ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 694 string-literal → • STRING_LITERAL STRING_LITERAL shift, and go to state 118 "template" reduce using rule 10 (EXTERN-opt) $default reduce using rule 692 (storage-class-specifier) string-literal go to state 119
139 class-name → IDENTIFIER • ["::"] 248 enum-name → IDENTIFIER • ["::"] 455 namespace-alias → IDENTIFIER • ["::"] 461 namespace-name → IDENTIFIER • ["::"] 708 template-name → IDENTIFIER • ["<"] 743 typedef-name → IDENTIFIER • ["::"] "::" reduce using rule 139 (class-name) "::" [reduce using rule 248 (enum-name)] "::" [reduce using rule 455 (namespace-alias)] "::" [reduce using rule 461 (namespace-name)] "::" [reduce using rule 743 (typedef-name)] "<" reduce using rule 708 (template-name) $default reduce using rule 139 (class-name)
14 INLINE-opt → "inline" • ["namespace"] 190 decl-specifier → "inline" • ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] "namespace" reduce using rule 14 (INLINE-opt) $default reduce using rule 190 (decl-specifier)
463 nested-name-specifier → "::" • $default reduce using rule 463 (nested-name-specifier)
267 explicit-specialization → "template" • "<" ">" declaration 704 template-head → "template" • "<" template-parameter-list ">" requires-clause-opt "<" shift, and go to state 120
139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → "typename" • nested-name-specifier IDENTIFIER 746 | "typename" • nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 122 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
332 function-specifier → "virtual" • $default reduce using rule 332 (function-specifier)
25 TYPENAME-opt → • %empty [IDENTIFIER, "::", "decltype"] 26 | • "typename" 44 alias-declaration → "using" • IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 782 using-declaration → "using" • using-declarator-list ";" 783 using-declarator → • TYPENAME-opt nested-name-specifier unqualified-id 784 using-declarator-list → • using-declarator ELLIPSIS-opt 785 | • using-declarator-list "," using-declarator ELLIPSIS-opt 787 using-enum-declaration → "using" • elaborated-enum-specifier ";" IDENTIFIER shift, and go to state 123 "typename" shift, and go to state 124 "enum" shift, and go to state 125 IDENTIFIER [reduce using rule 25 (TYPENAME-opt)] $default reduce using rule 25 (TYPENAME-opt) TYPENAME-opt go to state 126 elaborated-enum-specifier go to state 127 using-declarator go to state 128 using-declarator-list go to state 129
235 empty-declaration → ";" • $default reduce using rule 235 (empty-declaration)
136 class-key → "class" • $default reduce using rule 136 (class-key)
137 class-key → "struct" • $default reduce using rule 137 (class-key)
138 class-key → "union" • $default reduce using rule 138 (class-key)
177 cv-qualifier → "const" • $default reduce using rule 177 (cv-qualifier)
178 cv-qualifier → "volatile" • $default reduce using rule 178 (cv-qualifier)
185 decl-specifier → "friend" • $default reduce using rule 185 (decl-specifier)
186 decl-specifier → "typedef" • $default reduce using rule 186 (decl-specifier)
188 decl-specifier → "consteval" • $default reduce using rule 188 (decl-specifier)
189 decl-specifier → "constinit" • $default reduce using rule 189 (decl-specifier)
216 decltype-specifier → "decltype" • "(" expression ")" "(" shift, and go to state 130
139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → "enum" • nested-name-specifier-opt IDENTIFIER 245 enum-key → "enum" • [IDENTIFIER, "::", "alignas", "[", ":", "{", "decltype"] 246 | "enum" • "class" 247 | "enum" • "struct" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "class" shift, and go to state 131 "struct" shift, and go to state 132 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 245 (enum-key)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "::" [reduce using rule 245 (enum-key)] "decltype" [reduce using rule 245 (enum-key)] $default reduce using rule 245 (enum-key) class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 134 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
268 explicit-specifier → "explicit" • "(" constant-expression ")" 269 | "explicit" • [",", "constexpr", "...", "extern", IDENTIFIER, "inline", "noexcept", "::", "typename", "virtual", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", ">", "explicit", "*", "requires", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] "(" shift, and go to state 135 "(" [reduce using rule 269 (explicit-specifier)] $default reduce using rule 269 (explicit-specifier)
335 global-module-fragment → "module" • ";" declaration-seq-opt ";" shift, and go to state 136
342 header-name → • HEADER_NAME 439 module-import-declaration → "import" • module-name attribute-specifier-seq-opt ";" 440 | "import" • module-partition attribute-specifier-seq-opt ";" 441 | "import" • header-name attribute-specifier-seq-opt ";" 442 module-name → • module-name-qualifier-opt IDENTIFIER 443 module-name-qualifier → • IDENTIFIER "." 444 | • module-name-qualifier IDENTIFIER "." 445 module-name-qualifier-opt → • %empty [IDENTIFIER] 446 | • module-name-qualifier 447 module-partition → • ":" module-name-qualifier-opt IDENTIFIER IDENTIFIER shift, and go to state 137 ":" shift, and go to state 138 HEADER_NAME shift, and go to state 139 IDENTIFIER [reduce using rule 445 (module-name-qualifier-opt)] header-name go to state 140 module-name go to state 141 module-name-qualifier go to state 142 module-name-qualifier-opt go to state 143 module-partition go to state 144
236 enclosing-namespace-specifier → • IDENTIFIER 237 | • enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER 456 namespace-alias-definition → "namespace" • IDENTIFIER "=" qualified-namespace-specifier ";" 471 nested-namespace-definition → "namespace" • enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" IDENTIFIER shift, and go to state 145 enclosing-namespace-specifier go to state 146
662 simple-type-specifier → "char" • $default reduce using rule 662 (simple-type-specifier)
663 simple-type-specifier → "char8_t" • $default reduce using rule 663 (simple-type-specifier)
664 simple-type-specifier → "char16_t" • $default reduce using rule 664 (simple-type-specifier)
665 simple-type-specifier → "char32_t" • $default reduce using rule 665 (simple-type-specifier)
666 simple-type-specifier → "wchar_t" • $default reduce using rule 666 (simple-type-specifier)
667 simple-type-specifier → "bool" • $default reduce using rule 667 (simple-type-specifier)
668 simple-type-specifier → "short" • $default reduce using rule 668 (simple-type-specifier)
669 simple-type-specifier → "int" • $default reduce using rule 669 (simple-type-specifier)
670 simple-type-specifier → "long" • $default reduce using rule 670 (simple-type-specifier)
671 simple-type-specifier → "signed" • $default reduce using rule 671 (simple-type-specifier)
672 simple-type-specifier → "unsigned" • $default reduce using rule 672 (simple-type-specifier)
673 simple-type-specifier → "float" • $default reduce using rule 673 (simple-type-specifier)
674 simple-type-specifier → "double" • $default reduce using rule 674 (simple-type-specifier)
675 simple-type-specifier → "void" • $default reduce using rule 675 (simple-type-specifier)
688 static_assert-declaration → "static_assert" • "(" constant-expression ")" ";" 689 | "static_assert" • "(" constant-expression "," string-literal ")" ";" "(" shift, and go to state 147
690 storage-class-specifier → "static" • $default reduce using rule 690 (storage-class-specifier)
691 storage-class-specifier → "thread_local" • $default reduce using rule 691 (storage-class-specifier)
693 storage-class-specifier → "mutable" • $default reduce using rule 693 (storage-class-specifier)
266 explicit-instantiation → EXTERN-opt • "template" declaration "template" shift, and go to state 148
454 named-namespace-definition → INLINE-opt • "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 766 unnamed-namespace-definition → INLINE-opt • "namespace" attribute-specifier-seq-opt "{" namespace-body "}" "namespace" shift, and go to state 149
114 block-declaration → alias-declaration • $default reduce using rule 114 (block-declaration)
108 block-declaration → asm-declaration • $default reduce using rule 108 (block-declaration)
206 declaration → attribute-declaration • $default reduce using rule 206 (declaration)
71 attribute-declaration → attribute-specifier-seq • ";" 84 attribute-specifier-seq-opt → attribute-specifier-seq • ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 653 simple-declaration → attribute-specifier-seq • decl-specifier-seq init-declarator-list ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 ";" shift, and go to state 152 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 84 (attribute-specifier-seq-opt)] "extern" [reduce using rule 84 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 84 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 84 (attribute-specifier-seq-opt)] "::" [reduce using rule 84 (attribute-specifier-seq-opt)] "typename" [reduce using rule 84 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 84 (attribute-specifier-seq-opt)] "class" [reduce using rule 84 (attribute-specifier-seq-opt)] "struct" [reduce using rule 84 (attribute-specifier-seq-opt)] "union" [reduce using rule 84 (attribute-specifier-seq-opt)] "const" [reduce using rule 84 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 84 (attribute-specifier-seq-opt)] "friend" [reduce using rule 84 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 84 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 84 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 84 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 84 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 84 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 84 (attribute-specifier-seq-opt)] "auto" reduce using rule 84 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 84 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "bool" [reduce using rule 84 (attribute-specifier-seq-opt)] "short" [reduce using rule 84 (attribute-specifier-seq-opt)] "int" [reduce using rule 84 (attribute-specifier-seq-opt)] "long" [reduce using rule 84 (attribute-specifier-seq-opt)] "signed" [reduce using rule 84 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 84 (attribute-specifier-seq-opt)] "float" [reduce using rule 84 (attribute-specifier-seq-opt)] "double" [reduce using rule 84 (attribute-specifier-seq-opt)] "void" [reduce using rule 84 (attribute-specifier-seq-opt)] "static" [reduce using rule 84 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 84 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 84 (attribute-specifier-seq-opt)] $default reduce using rule 84 (attribute-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 153 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 49 asm-declaration → attribute-specifier-seq-opt • "asm" "(" string-literal ")" ";" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 193 decl-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", "(", "&", "&&", "operator", "decltype", "*", "~"] 194 | • decl-specifier-seq 213 declarator → • ptr-declarator 214 | • noptr-declarator parameters-and-qualifiers trailing-return-type 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 330 function-definition → attribute-specifier-seq-opt • decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | attribute-specifier-seq-opt • decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 487 nodeclspec-function-declaration → attribute-specifier-seq-opt • declarator ";" 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 654 simple-declaration → attribute-specifier-seq-opt • decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 786 using-directive → attribute-specifier-seq-opt • "using" "namespace" nested-name-specifier-opt namespace-name ";" "constexpr" shift, and go to state 1 "..." shift, and go to state 156 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 157 "alignas" shift, and go to state 158 "(" shift, and go to state 159 "&" shift, and go to state 160 "asm" shift, and go to state 161 "[" shift, and go to state 162 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "&&" shift, and go to state 163 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "*" shift, and go to state 164 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "..." [reduce using rule 193 (decl-specifier-seq-opt)] IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] IDENTIFIER [reduce using rule 193 (decl-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 193 (decl-specifier-seq-opt)] "(" [reduce using rule 193 (decl-specifier-seq-opt)] "&" [reduce using rule 193 (decl-specifier-seq-opt)] "&&" [reduce using rule 193 (decl-specifier-seq-opt)] "operator" reduce using rule 5 (ELLIPSIS-opt) "operator" [reduce using rule 193 (decl-specifier-seq-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 193 (decl-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "*" [reduce using rule 193 (decl-specifier-seq-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) "~" [reduce using rule 193 (decl-specifier-seq-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 alignment-specifier go to state 166 attribute-specifier go to state 167 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 168 decl-specifier-seq-opt go to state 169 declarator go to state 170 declarator-id go to state 171 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 172 nested-name-specifier-opt go to state 90 noptr-declarator go to state 173 placeholder-type-specifier go to state 94 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
195 declaration → block-declaration • $default reduce using rule 195 (declaration)
144 class-specifier → class-head • "{" member-specification-opt "}" "{" shift, and go to state 176
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [IDENTIFIER, "::", "alignas", "[", ":", "{", "decltype"] 84 | • attribute-specifier-seq 133 class-head → class-key • attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | class-key • attribute-specifier-seq-opt base-clause-opt 139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 231 elaborated-type-specifier → class-key • attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | class-key • simple-template-id 233 | class-key • nested-name-specifier TEMPLATE-opt simple-template-id 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 178 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 179 simple-template-id go to state 180 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
725 type-name → class-name • $default reduce using rule 725 (type-name)
220 defining-type-specifier → class-specifier • $default reduce using rule 220 (defining-type-specifier)
740 type-specifier → cv-qualifier • $default reduce using rule 740 (type-specifier)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [",", "...", IDENTIFIER, "noexcept", "::", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "&&", "operator", "decltype", "->", ">", "*", "requires", "~"] 84 | • attribute-specifier-seq 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 191 | decl-specifier • attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 192 | decl-specifier • decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 181 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 182 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 139 class-name → • IDENTIFIER 140 | • simple-template-id 213 declarator → • ptr-declarator 214 | • noptr-declarator parameters-and-qualifiers trailing-return-type 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 351 init-declarator → • declarator initializer-opt 352 | • declarator requires-clause 353 init-declarator-list → • init-declarator 354 | • init-declarator-list "," init-declarator 355 init-declarator-list-opt → • %empty [";"] 356 | • init-declarator-list 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 652 simple-declaration → decl-specifier-seq • init-declarator-list-opt ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] ";" reduce using rule 355 (init-declarator-list-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator go to state 183 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 init-declarator go to state 184 init-declarator-list go to state 185 init-declarator-list-opt go to state 186 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
208 declaration-seq → declaration • $default reduce using rule 208 (declaration-seq)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 209 declaration-seq → declaration-seq • declaration 211 declaration-seq-opt → declaration-seq • [$end, "export", "}", "module"] 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 273 | • "export" "{" declaration-seq-opt "}" 274 | • "export" module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 395 | • "extern" string-literal declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 $end reduce using rule 211 (declaration-seq-opt) "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "export" [reduce using rule 211 (declaration-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 211 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "module" reduce using rule 211 (declaration-seq-opt) "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 188 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
717 translation-unit → declaration-seq-opt • $default reduce using rule 717 (translation-unit)
466 nested-name-specifier → decltype-specifier • "::" 659 simple-type-specifier → decltype-specifier • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" shift, and go to state 189 "::" [reduce using rule 659 (simple-type-specifier)] $default reduce using rule 659 (simple-type-specifier)
199 declaration → deduction-guide • $default reduce using rule 199 (declaration)
183 decl-specifier → defining-type-specifier • $default reduce using rule 183 (decl-specifier)
234 elaborated-type-specifier → elaborated-enum-specifier • $default reduce using rule 234 (elaborated-type-specifier)
738 type-specifier → elaborated-type-specifier • $default reduce using rule 738 (type-specifier)
205 declaration → empty-declaration • $default reduce using rule 205 (declaration)
249 enum-specifier → enum-head • "{" enumerator-list-opt "}" 250 | enum-head • "{" enumerator-list "," "}" "{" shift, and go to state 190
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 241 enum-head → enum-key • attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 507 opaque-enum-declaration → enum-key • attribute-specifier-seq-opt enum-head-name enum-base-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 191
726 type-name → enum-name • $default reduce using rule 726 (type-name)
221 defining-type-specifier → enum-specifier • $default reduce using rule 221 (defining-type-specifier)
200 declaration → explicit-instantiation • $default reduce using rule 200 (declaration)
201 declaration → explicit-specialization • $default reduce using rule 201 (declaration)
271 explicit-specifier-opt → explicit-specifier • [IDENTIFIER] 333 function-specifier → explicit-specifier • ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] IDENTIFIER reduce using rule 271 (explicit-specifier-opt) IDENTIFIER [reduce using rule 333 (function-specifier)] $default reduce using rule 333 (function-specifier)
217 deduction-guide → explicit-specifier-opt • template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 708 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 192 template-name go to state 193
202 declaration → export-declaration • $default reduce using rule 202 (declaration)
197 declaration → function-definition • $default reduce using rule 197 (declaration)
184 decl-specifier → function-specifier • $default reduce using rule 184 (decl-specifier)
337 global-module-fragment-opt → global-module-fragment • $default reduce using rule 337 (global-module-fragment-opt)
7 EXPORT-opt → • %empty ["module"] 8 | • "export" 438 module-declaration → • EXPORT-opt "module" module-name module-partition-opt attribute-specifier-seq-opt ";" 718 translation-unit → global-module-fragment-opt • module-declaration declaration-seq-opt private-module-fragment-opt "export" shift, and go to state 194 $default reduce using rule 7 (EXPORT-opt) EXPORT-opt go to state 195 module-declaration go to state 196
203 declaration → linkage-specification • $default reduce using rule 203 (declaration)
207 declaration → module-import-declaration • $default reduce using rule 207 (declaration)
458 namespace-definition → named-namespace-definition • $default reduce using rule 458 (namespace-definition)
462 namespace-name → namespace-alias • $default reduce using rule 462 (namespace-name)
109 block-declaration → namespace-alias-definition • $default reduce using rule 109 (block-declaration)
204 declaration → namespace-definition • $default reduce using rule 204 (declaration)
465 nested-name-specifier → namespace-name • "::" "::" shift, and go to state 197
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 467 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 468 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 470 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] 658 simple-type-specifier → nested-name-specifier • "template" simple-template-id IDENTIFIER shift, and go to state 198 "template" shift, and go to state 199 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 470 (nested-name-specifier-opt)] TEMPLATE-opt go to state 200
139 class-name → • IDENTIFIER 140 | • simple-template-id 153 concept-name → • IDENTIFIER 248 enum-name → • IDENTIFIER 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → nested-name-specifier-opt • type-name 661 | nested-name-specifier-opt • template-name 708 template-name → • IDENTIFIER 720 type-constraint → nested-name-specifier-opt • concept-name 721 | nested-name-specifier-opt • concept-name "<" template-argument-list-opt ">" 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 201 class-name go to state 55 concept-name go to state 202 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 203 type-name go to state 204 typedef-name go to state 108
460 namespace-definition → nested-namespace-definition • $default reduce using rule 460 (namespace-definition)
196 declaration → nodeclspec-function-declaration • $default reduce using rule 196 (declaration)
115 block-declaration → opaque-enum-declaration • $default reduce using rule 115 (block-declaration)
660 simple-type-specifier → placeholder-type-specifier • $default reduce using rule 660 (simple-type-specifier)
107 block-declaration → simple-declaration • $default reduce using rule 107 (block-declaration)
140 class-name → simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 744 typedef-name → simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "," reduce using rule 140 (class-name) "," [reduce using rule 744 (typedef-name)] "constexpr" reduce using rule 140 (class-name) "constexpr" [reduce using rule 744 (typedef-name)] "..." reduce using rule 140 (class-name) "..." [reduce using rule 744 (typedef-name)] "export" reduce using rule 140 (class-name) "export" [reduce using rule 744 (typedef-name)] "extern" reduce using rule 140 (class-name) "extern" [reduce using rule 744 (typedef-name)] IDENTIFIER reduce using rule 140 (class-name) IDENTIFIER [reduce using rule 744 (typedef-name)] "inline" reduce using rule 140 (class-name) "inline" [reduce using rule 744 (typedef-name)] "noexcept" reduce using rule 140 (class-name) "noexcept" [reduce using rule 744 (typedef-name)] "::" reduce using rule 140 (class-name) "::" [reduce using rule 744 (typedef-name)] "template" reduce using rule 140 (class-name) "template" [reduce using rule 744 (typedef-name)] "typename" reduce using rule 140 (class-name) "typename" [reduce using rule 744 (typedef-name)] "virtual" reduce using rule 140 (class-name) "virtual" [reduce using rule 744 (typedef-name)] "+" reduce using rule 140 (class-name) "+" [reduce using rule 744 (typedef-name)] "-" reduce using rule 140 (class-name) "-" [reduce using rule 744 (typedef-name)] "using" reduce using rule 140 (class-name) "using" [reduce using rule 744 (typedef-name)] "=" reduce using rule 140 (class-name) "=" [reduce using rule 744 (typedef-name)] ";" reduce using rule 140 (class-name) ";" [reduce using rule 744 (typedef-name)] "alignas" reduce using rule 140 (class-name) "alignas" [reduce using rule 744 (typedef-name)] "(" reduce using rule 140 (class-name) "(" [reduce using rule 744 (typedef-name)] ")" reduce using rule 140 (class-name) ")" [reduce using rule 744 (typedef-name)] "&" reduce using rule 140 (class-name) "&" [reduce using rule 744 (typedef-name)] "asm" reduce using rule 140 (class-name) "asm" [reduce using rule 744 (typedef-name)] "*=" reduce using rule 140 (class-name) "*=" [reduce using rule 744 (typedef-name)] "/=" reduce using rule 140 (class-name) "/=" [reduce using rule 744 (typedef-name)] "%=" reduce using rule 140 (class-name) "%=" [reduce using rule 744 (typedef-name)] "+=" reduce using rule 140 (class-name) "+=" [reduce using rule 744 (typedef-name)] "-=" reduce using rule 140 (class-name) "-=" [reduce using rule 744 (typedef-name)] ">>=" reduce using rule 140 (class-name) ">>=" [reduce using rule 744 (typedef-name)] "<<=" reduce using rule 140 (class-name) "<<=" [reduce using rule 744 (typedef-name)] "&=" reduce using rule 140 (class-name) "&=" [reduce using rule 744 (typedef-name)] "^=" reduce using rule 140 (class-name) "^=" [reduce using rule 744 (typedef-name)] "|=" reduce using rule 140 (class-name) "|=" [reduce using rule 744 (typedef-name)] "[" reduce using rule 140 (class-name) "[" [reduce using rule 744 (typedef-name)] "]" reduce using rule 140 (class-name) "]" [reduce using rule 744 (typedef-name)] ":" reduce using rule 140 (class-name) ":" [reduce using rule 744 (typedef-name)] "{" reduce using rule 140 (class-name) "{" [reduce using rule 744 (typedef-name)] "}" reduce using rule 140 (class-name) "}" [reduce using rule 744 (typedef-name)] "class" reduce using rule 140 (class-name) "class" [reduce using rule 744 (typedef-name)] "struct" reduce using rule 140 (class-name) "struct" [reduce using rule 744 (typedef-name)] "union" reduce using rule 140 (class-name) "union" [reduce using rule 744 (typedef-name)] "final" reduce using rule 140 (class-name) "final" [reduce using rule 744 (typedef-name)] "<=>" reduce using rule 140 (class-name) "<=>" [reduce using rule 744 (typedef-name)] "concept" reduce using rule 140 (class-name) "concept" [reduce using rule 744 (typedef-name)] "?" reduce using rule 140 (class-name) "?" [reduce using rule 744 (typedef-name)] "&&" reduce using rule 140 (class-name) "&&" [reduce using rule 744 (typedef-name)] "||" reduce using rule 140 (class-name) "||" [reduce using rule 744 (typedef-name)] "operator" reduce using rule 140 (class-name) "operator" [reduce using rule 744 (typedef-name)] "const" reduce using rule 140 (class-name) "const" [reduce using rule 744 (typedef-name)] "volatile" reduce using rule 140 (class-name) "volatile" [reduce using rule 744 (typedef-name)] "friend" reduce using rule 140 (class-name) "friend" [reduce using rule 744 (typedef-name)] "typedef" reduce using rule 140 (class-name) "typedef" [reduce using rule 744 (typedef-name)] "consteval" reduce using rule 140 (class-name) "consteval" [reduce using rule 744 (typedef-name)] "constinit" reduce using rule 140 (class-name) "constinit" [reduce using rule 744 (typedef-name)] "decltype" reduce using rule 140 (class-name) "decltype" [reduce using rule 744 (typedef-name)] "->" reduce using rule 140 (class-name) "->" [reduce using rule 744 (typedef-name)] "." reduce using rule 140 (class-name) "." [reduce using rule 744 (typedef-name)] "enum" reduce using rule 140 (class-name) "enum" [reduce using rule 744 (typedef-name)] "==" reduce using rule 140 (class-name) "==" [reduce using rule 744 (typedef-name)] "!=" reduce using rule 140 (class-name) "!=" [reduce using rule 744 (typedef-name)] "^" reduce using rule 140 (class-name) "^" [reduce using rule 744 (typedef-name)] "<" reduce using rule 140 (class-name) "<" [reduce using rule 744 (typedef-name)] ">" reduce using rule 140 (class-name) ">" [reduce using rule 744 (typedef-name)] "explicit" reduce using rule 140 (class-name) "explicit" [reduce using rule 744 (typedef-name)] "*" reduce using rule 140 (class-name) "*" [reduce using rule 744 (typedef-name)] "/" reduce using rule 140 (class-name) "/" [reduce using rule 744 (typedef-name)] "%" reduce using rule 140 (class-name) "%" [reduce using rule 744 (typedef-name)] "|" reduce using rule 140 (class-name) "|" [reduce using rule 744 (typedef-name)] "<<" reduce using rule 140 (class-name) "<<" [reduce using rule 744 (typedef-name)] ">>" reduce using rule 140 (class-name) ">>" [reduce using rule 744 (typedef-name)] "<=" reduce using rule 140 (class-name) "<=" [reduce using rule 744 (typedef-name)] ">=" reduce using rule 140 (class-name) ">=" [reduce using rule 744 (typedef-name)] ".*" reduce using rule 140 (class-name) ".*" [reduce using rule 744 (typedef-name)] "->*" reduce using rule 140 (class-name) "->*" [reduce using rule 744 (typedef-name)] "try" reduce using rule 140 (class-name) "try" [reduce using rule 744 (typedef-name)] "import" reduce using rule 140 (class-name) "import" [reduce using rule 744 (typedef-name)] "namespace" reduce using rule 140 (class-name) "namespace" [reduce using rule 744 (typedef-name)] "requires" reduce using rule 140 (class-name) "requires" [reduce using rule 744 (typedef-name)] "~" reduce using rule 140 (class-name) "~" [reduce using rule 744 (typedef-name)] "++" reduce using rule 140 (class-name) "++" [reduce using rule 744 (typedef-name)] "--" reduce using rule 140 (class-name) "--" [reduce using rule 744 (typedef-name)] "auto" reduce using rule 140 (class-name) "auto" [reduce using rule 744 (typedef-name)] "char" reduce using rule 140 (class-name) "char" [reduce using rule 744 (typedef-name)] "char8_t" reduce using rule 140 (class-name) "char8_t" [reduce using rule 744 (typedef-name)] "char16_t" reduce using rule 140 (class-name) "char16_t" [reduce using rule 744 (typedef-name)] "char32_t" reduce using rule 140 (class-name) "char32_t" [reduce using rule 744 (typedef-name)] "wchar_t" reduce using rule 140 (class-name) "wchar_t" [reduce using rule 744 (typedef-name)] "bool" reduce using rule 140 (class-name) "bool" [reduce using rule 744 (typedef-name)] "short" reduce using rule 140 (class-name) "short" [reduce using rule 744 (typedef-name)] "int" reduce using rule 140 (class-name) "int" [reduce using rule 744 (typedef-name)] "long" reduce using rule 140 (class-name) "long" [reduce using rule 744 (typedef-name)] "signed" reduce using rule 140 (class-name) "signed" [reduce using rule 744 (typedef-name)] "unsigned" reduce using rule 140 (class-name) "unsigned" [reduce using rule 744 (typedef-name)] "float" reduce using rule 140 (class-name) "float" [reduce using rule 744 (typedef-name)] "double" reduce using rule 140 (class-name) "double" [reduce using rule 744 (typedef-name)] "void" reduce using rule 140 (class-name) "void" [reduce using rule 744 (typedef-name)] "static_assert" reduce using rule 140 (class-name) "static_assert" [reduce using rule 744 (typedef-name)] "static" reduce using rule 140 (class-name) "static" [reduce using rule 744 (typedef-name)] "thread_local" reduce using rule 140 (class-name) "thread_local" [reduce using rule 744 (typedef-name)] "mutable" reduce using rule 140 (class-name) "mutable" [reduce using rule 744 (typedef-name)] "override" reduce using rule 140 (class-name) "override" [reduce using rule 744 (typedef-name)] $default reduce using rule 140 (class-name)
737 type-specifier → simple-type-specifier • $default reduce using rule 737 (type-specifier)
113 block-declaration → static_assert-declaration • $default reduce using rule 113 (block-declaration)
182 decl-specifier → storage-class-specifier • $default reduce using rule 182 (decl-specifier)
198 declaration → template-declaration • $default reduce using rule 198 (declaration)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 152 concept-definition → • "concept" concept-name "=" constraint-expression ";" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 273 | • "export" "{" declaration-seq-opt "}" 274 | • "export" module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 395 | • "extern" string-literal declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 702 | template-head • declaration 703 | • template-head concept-definition 703 | template-head • concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "concept" shift, and go to state 205 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 concept-definition go to state 206 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 207 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
656 simple-template-id → template-name • "<" template-argument-list-opt ">" "<" shift, and go to state 208
796 result → translation-unit • $default reduce using rule 796 (result)
723 type-constraint-opt → type-constraint • $default reduce using rule 723 (type-constraint-opt)
565 placeholder-type-specifier → type-constraint-opt • "auto" 566 | type-constraint-opt • "decltype" "(" "auto" ")" "decltype" shift, and go to state 209 "auto" shift, and go to state 210
464 nested-name-specifier → type-name • "::" "::" shift, and go to state 211
219 defining-type-specifier → type-specifier • $default reduce using rule 219 (defining-type-specifier)
727 type-name → typedef-name • $default reduce using rule 727 (type-name)
739 type-specifier → typename-specifier • $default reduce using rule 739 (type-specifier)
459 namespace-definition → unnamed-namespace-definition • $default reduce using rule 459 (namespace-definition)
110 block-declaration → using-declaration • $default reduce using rule 110 (block-declaration)
112 block-declaration → using-directive • $default reduce using rule 112 (block-declaration)
111 block-declaration → using-enum-declaration • $default reduce using rule 111 (block-declaration)
0 $accept → result • $end $end shift, and go to state 212
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 208 declaration-seq → • declaration 209 | • declaration-seq declaration 210 declaration-seq-opt → • %empty ["}"] 211 | • declaration-seq 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 273 | • "export" "{" declaration-seq-opt "}" 273 | "export" "{" • declaration-seq-opt "}" 274 | • "export" module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 395 | • "extern" string-literal declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 210 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 213 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
272 export-declaration → "export" declaration • $default reduce using rule 272 (export-declaration)
207 declaration → module-import-declaration • [$end, "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "::", "template", "typename", "virtual", "private", "protected", "public", "using", ";", "alignas", "(", "&", "asm", "[", ":", "}", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "module", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] 274 export-declaration → "export" module-import-declaration • [$end, "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "::", "template", "typename", "virtual", "private", "protected", "public", "using", ";", "alignas", "(", "&", "asm", "[", ":", "}", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "module", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] $end reduce using rule 207 (declaration) $end [reduce using rule 274 (export-declaration)] "constexpr" reduce using rule 207 (declaration) "constexpr" [reduce using rule 274 (export-declaration)] "..." reduce using rule 207 (declaration) "..." [reduce using rule 274 (export-declaration)] "export" reduce using rule 207 (declaration) "export" [reduce using rule 274 (export-declaration)] "extern" reduce using rule 207 (declaration) "extern" [reduce using rule 274 (export-declaration)] IDENTIFIER reduce using rule 207 (declaration) IDENTIFIER [reduce using rule 274 (export-declaration)] "inline" reduce using rule 207 (declaration) "inline" [reduce using rule 274 (export-declaration)] "::" reduce using rule 207 (declaration) "::" [reduce using rule 274 (export-declaration)] "template" reduce using rule 207 (declaration) "template" [reduce using rule 274 (export-declaration)] "typename" reduce using rule 207 (declaration) "typename" [reduce using rule 274 (export-declaration)] "virtual" reduce using rule 207 (declaration) "virtual" [reduce using rule 274 (export-declaration)] "private" reduce using rule 207 (declaration) "private" [reduce using rule 274 (export-declaration)] "protected" reduce using rule 207 (declaration) "protected" [reduce using rule 274 (export-declaration)] "public" reduce using rule 207 (declaration) "public" [reduce using rule 274 (export-declaration)] "using" reduce using rule 207 (declaration) "using" [reduce using rule 274 (export-declaration)] ";" reduce using rule 207 (declaration) ";" [reduce using rule 274 (export-declaration)] "alignas" reduce using rule 207 (declaration) "alignas" [reduce using rule 274 (export-declaration)] "(" reduce using rule 207 (declaration) "(" [reduce using rule 274 (export-declaration)] "&" reduce using rule 207 (declaration) "&" [reduce using rule 274 (export-declaration)] "asm" reduce using rule 207 (declaration) "asm" [reduce using rule 274 (export-declaration)] "[" reduce using rule 207 (declaration) "[" [reduce using rule 274 (export-declaration)] ":" reduce using rule 207 (declaration) ":" [reduce using rule 274 (export-declaration)] "}" reduce using rule 207 (declaration) "}" [reduce using rule 274 (export-declaration)] "class" reduce using rule 207 (declaration) "class" [reduce using rule 274 (export-declaration)] "struct" reduce using rule 207 (declaration) "struct" [reduce using rule 274 (export-declaration)] "union" reduce using rule 207 (declaration) "union" [reduce using rule 274 (export-declaration)] "&&" reduce using rule 207 (declaration) "&&" [reduce using rule 274 (export-declaration)] "operator" reduce using rule 207 (declaration) "operator" [reduce using rule 274 (export-declaration)] "const" reduce using rule 207 (declaration) "const" [reduce using rule 274 (export-declaration)] "volatile" reduce using rule 207 (declaration) "volatile" [reduce using rule 274 (export-declaration)] "friend" reduce using rule 207 (declaration) "friend" [reduce using rule 274 (export-declaration)] "typedef" reduce using rule 207 (declaration) "typedef" [reduce using rule 274 (export-declaration)] "consteval" reduce using rule 207 (declaration) "consteval" [reduce using rule 274 (export-declaration)] "constinit" reduce using rule 207 (declaration) "constinit" [reduce using rule 274 (export-declaration)] "decltype" reduce using rule 207 (declaration) "decltype" [reduce using rule 274 (export-declaration)] "enum" reduce using rule 207 (declaration) "enum" [reduce using rule 274 (export-declaration)] "explicit" reduce using rule 207 (declaration) "explicit" [reduce using rule 274 (export-declaration)] "*" reduce using rule 207 (declaration) "*" [reduce using rule 274 (export-declaration)] "module" reduce using rule 207 (declaration) "module" [reduce using rule 274 (export-declaration)] "import" reduce using rule 207 (declaration) "import" [reduce using rule 274 (export-declaration)] "namespace" reduce using rule 207 (declaration) "namespace" [reduce using rule 274 (export-declaration)] "~" reduce using rule 207 (declaration) "~" [reduce using rule 274 (export-declaration)] "auto" reduce using rule 207 (declaration) "auto" [reduce using rule 274 (export-declaration)] "char" reduce using rule 207 (declaration) "char" [reduce using rule 274 (export-declaration)] "char8_t" reduce using rule 207 (declaration) "char8_t" [reduce using rule 274 (export-declaration)] "char16_t" reduce using rule 207 (declaration) "char16_t" [reduce using rule 274 (export-declaration)] "char32_t" reduce using rule 207 (declaration) "char32_t" [reduce using rule 274 (export-declaration)] "wchar_t" reduce using rule 207 (declaration) "wchar_t" [reduce using rule 274 (export-declaration)] "bool" reduce using rule 207 (declaration) "bool" [reduce using rule 274 (export-declaration)] "short" reduce using rule 207 (declaration) "short" [reduce using rule 274 (export-declaration)] "int" reduce using rule 207 (declaration) "int" [reduce using rule 274 (export-declaration)] "long" reduce using rule 207 (declaration) "long" [reduce using rule 274 (export-declaration)] "signed" reduce using rule 207 (declaration) "signed" [reduce using rule 274 (export-declaration)] "unsigned" reduce using rule 207 (declaration) "unsigned" [reduce using rule 274 (export-declaration)] "float" reduce using rule 207 (declaration) "float" [reduce using rule 274 (export-declaration)] "double" reduce using rule 207 (declaration) "double" [reduce using rule 274 (export-declaration)] "void" reduce using rule 207 (declaration) "void" [reduce using rule 274 (export-declaration)] "static_assert" reduce using rule 207 (declaration) "static_assert" [reduce using rule 274 (export-declaration)] "static" reduce using rule 207 (declaration) "static" [reduce using rule 274 (export-declaration)] "thread_local" reduce using rule 207 (declaration) "thread_local" [reduce using rule 274 (export-declaration)] "mutable" reduce using rule 207 (declaration) "mutable" [reduce using rule 274 (export-declaration)] $default reduce using rule 207 (declaration)
694 string-literal → STRING_LITERAL • $default reduce using rule 694 (string-literal)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 273 | • "export" "{" declaration-seq-opt "}" 274 | • "export" module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 394 | "extern" string-literal • "{" declaration-seq-opt "}" 395 | • "extern" string-literal declaration 395 | "extern" string-literal • declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "{" shift, and go to state 214 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 215 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 267 explicit-specialization → "template" "<" • ">" declaration 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 554 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 555 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 556 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 557 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 704 | "template" "<" • template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 709 template-parameter → • type-parameter 710 | • parameter-declaration 711 template-parameter-list → • template-parameter 712 | • template-parameter-list "," template-parameter 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 728 type-parameter → • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 729 | • type-parameter-key IDENTIFIER-opt "=" type-id 730 | • type-constraint ELLIPSIS-opt IDENTIFIER-opt 731 | • type-constraint IDENTIFIER-opt "=" type-id 732 | • template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 733 | • template-head type-parameter-key IDENTIFIER-opt "=" id-expression 734 type-parameter-key → • "class" 735 | • "typename" 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "template" shift, and go to state 216 "typename" shift, and go to state 217 "class" shift, and go to state 218 "decltype" shift, and go to state 21 ">" shift, and go to state 219 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 221 parameter-declaration go to state 222 simple-template-id go to state 96 template-head go to state 223 template-name go to state 102 template-parameter go to state 224 template-parameter-list go to state 225 type-constraint go to state 226 type-name go to state 106 type-parameter go to state 227 type-parameter-key go to state 228 typedef-name go to state 108
466 nested-name-specifier → decltype-specifier • "::" "::" shift, and go to state 189
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 467 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 468 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 745 typename-specifier → "typename" nested-name-specifier • IDENTIFIER 746 | "typename" nested-name-specifier • TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 229 "template" shift, and go to state 230 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] TEMPLATE-opt go to state 231
44 alias-declaration → "using" IDENTIFIER • attribute-specifier-seq-opt "=" defining-type-id ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 232
26 TYPENAME-opt → "typename" • $default reduce using rule 26 (TYPENAME-opt)
139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → "enum" • nested-name-specifier-opt IDENTIFIER 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 134 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 783 using-declarator → TYPENAME-opt • nested-name-specifier unqualified-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 233 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
787 using-enum-declaration → "using" elaborated-enum-specifier • ";" ";" shift, and go to state 234
5 ELLIPSIS-opt → • %empty [",", ";"] 6 | • "..." 784 using-declarator-list → using-declarator • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 235
782 using-declaration → "using" using-declarator-list • ";" 785 using-declarator-list → using-declarator-list • "," using-declarator ELLIPSIS-opt "," shift, and go to state 236 ";" shift, and go to state 237
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 216 | "decltype" "(" • expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 286 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
246 enum-key → "enum" "class" • $default reduce using rule 246 (enum-key)
247 enum-key → "enum" "struct" • $default reduce using rule 247 (enum-key)
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 467 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 468 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 470 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] IDENTIFIER shift, and go to state 198 "template" shift, and go to state 230 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 470 (nested-name-specifier-opt)] TEMPLATE-opt go to state 200
230 elaborated-enum-specifier → "enum" nested-name-specifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 326
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 268 explicit-specifier → "explicit" "(" • constant-expression ")" 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 328 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 208 declaration-seq → • declaration 209 | • declaration-seq declaration 210 declaration-seq-opt → • %empty ["export", "module"] 211 | • declaration-seq 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 273 | • "export" "{" declaration-seq-opt "}" 274 | • "export" module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 335 global-module-fragment → "module" ";" • declaration-seq-opt 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 395 | • "extern" string-literal declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "export" [reduce using rule 210 (declaration-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "module" reduce using rule 210 (declaration-seq-opt) "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 330 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
443 module-name-qualifier → IDENTIFIER • "." "." shift, and go to state 331
443 module-name-qualifier → • IDENTIFIER "." 444 | • module-name-qualifier IDENTIFIER "." 445 module-name-qualifier-opt → • %empty [IDENTIFIER] 446 | • module-name-qualifier 447 module-partition → ":" • module-name-qualifier-opt IDENTIFIER IDENTIFIER shift, and go to state 137 IDENTIFIER [reduce using rule 445 (module-name-qualifier-opt)] module-name-qualifier go to state 142 module-name-qualifier-opt go to state 332
342 header-name → HEADER_NAME • $default reduce using rule 342 (header-name)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 441 module-import-declaration → "import" header-name • attribute-specifier-seq-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 333
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 439 module-import-declaration → "import" module-name • attribute-specifier-seq-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 334
444 module-name-qualifier → module-name-qualifier • IDENTIFIER "." 446 module-name-qualifier-opt → module-name-qualifier • [IDENTIFIER] IDENTIFIER shift, and go to state 335 IDENTIFIER [reduce using rule 446 (module-name-qualifier-opt)]
442 module-name → module-name-qualifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 336
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 440 module-import-declaration → "import" module-partition • attribute-specifier-seq-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 337
236 enclosing-namespace-specifier → IDENTIFIER • ["::"] 456 namespace-alias-definition → "namespace" IDENTIFIER • "=" qualified-namespace-specifier ";" "=" shift, and go to state 338 $default reduce using rule 236 (enclosing-namespace-specifier)
237 enclosing-namespace-specifier → enclosing-namespace-specifier • "::" INLINE-opt IDENTIFIER 471 nested-namespace-definition → "namespace" enclosing-namespace-specifier • "::" INLINE-opt IDENTIFIER "{" namespace-body "}" "::" shift, and go to state 339
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → "static_assert" "(" • constant-expression ")" ";" 689 | "static_assert" "(" • constant-expression "," string-literal ")" ";" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 340 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 266 | EXTERN-opt "template" • declaration 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 273 | • "export" "{" declaration-seq-opt "}" 274 | • "export" module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 395 | • "extern" string-literal declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 341 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 454 named-namespace-definition → INLINE-opt "namespace" • attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 766 unnamed-namespace-definition → INLINE-opt "namespace" • attribute-specifier-seq-opt "{" namespace-body "}" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 342
692 storage-class-specifier → "extern" • $default reduce using rule 692 (storage-class-specifier)
190 decl-specifier → "inline" • $default reduce using rule 190 (decl-specifier)
71 attribute-declaration → attribute-specifier-seq ";" • $default reduce using rule 71 (attribute-declaration)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 139 class-name → • IDENTIFIER 140 | • simple-template-id 213 declarator → • ptr-declarator 214 | • noptr-declarator parameters-and-qualifiers trailing-return-type 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 351 init-declarator → • declarator initializer-opt 352 | • declarator requires-clause 353 init-declarator-list → • init-declarator 354 | • init-declarator-list "," init-declarator 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 653 simple-declaration → attribute-specifier-seq decl-specifier-seq • init-declarator-list ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator go to state 183 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 init-declarator go to state 184 init-declarator-list go to state 343 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 241 enum-head → enum-key • attribute-specifier-seq-opt enum-head-name-opt enum-base-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 344
333 function-specifier → explicit-specifier • $default reduce using rule 333 (function-specifier)
6 ELLIPSIS-opt → "..." • $default reduce using rule 6 (ELLIPSIS-opt)
786 using-directive → attribute-specifier-seq-opt "using" • "namespace" nested-name-specifier-opt namespace-name ";" "namespace" shift, and go to state 345
45 alignment-specifier → "alignas" • "(" type-id ELLIPSIS-opt ")" 46 | "alignas" • "(" constant-expression ELLIPSIS-opt ")" "(" shift, and go to state 346
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 139 class-name → • IDENTIFIER 140 | • simple-template-id 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 504 | "(" • ptr-declarator ")" 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 347 ptr-declarator go to state 348 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 606 ptr-operator → "&" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 349
49 asm-declaration → attribute-specifier-seq-opt "asm" • "(" string-literal ")" ";" "(" shift, and go to state 350
80 attribute-specifier → "[" • "[" attribute-using-prefix-opt attribute-list "]" "]" "[" shift, and go to state 351
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 607 ptr-operator → "&&" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 352
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 605 ptr-operator → "*" • attribute-specifier-seq-opt cv-qualifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 353
139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 215 declarator-id → ELLIPSIS-opt • id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 343 id-expression → • unqualified-id 344 | • qualified-id 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id IDENTIFIER shift, and go to state 238 "::" shift, and go to state 6 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 "~" shift, and go to state 354 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 121 enum-name go to state 71 id-expression go to state 355 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 356 operator-function-id go to state 302 qualified-id go to state 307 simple-template-id go to state 311 template-id go to state 314 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 319
81 attribute-specifier → alignment-specifier • $default reduce using rule 81 (attribute-specifier)
82 attribute-specifier-seq → attribute-specifier-seq-opt attribute-specifier • $default reduce using rule 82 (attribute-specifier-seq)
194 decl-specifier-seq-opt → decl-specifier-seq • ["...", IDENTIFIER, "::", "(", "&", "&&", "operator", "decltype", "*", "~"] 614 ref-qualifier → • "&" 615 | • "&&" 616 ref-qualifier-opt → • %empty ["["] 617 | • ref-qualifier 654 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq • ref-qualifier-opt "[" identifier-list "]" initializer ";" "&" shift, and go to state 357 "&&" shift, and go to state 358 "&" [reduce using rule 194 (decl-specifier-seq-opt)] "[" reduce using rule 616 (ref-qualifier-opt) "&&" [reduce using rule 194 (decl-specifier-seq-opt)] $default reduce using rule 194 (decl-specifier-seq-opt) ref-qualifier go to state 359 ref-qualifier-opt go to state 360
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 139 class-name → • IDENTIFIER 140 | • simple-template-id 213 declarator → • ptr-declarator 214 | • noptr-declarator parameters-and-qualifiers trailing-return-type 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 330 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt • declarator virt-specifier-seq-opt function-body 331 | attribute-specifier-seq-opt decl-specifier-seq-opt • declarator requires-clause function-body 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator go to state 361 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
487 nodeclspec-function-declaration → attribute-specifier-seq-opt declarator • ";" ";" shift, and go to state 362
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 501 noptr-declarator → declarator-id • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 363
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 467 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 468 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 470 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] 608 ptr-operator → nested-name-specifier • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 658 simple-type-specifier → nested-name-specifier • "template" simple-template-id IDENTIFIER shift, and go to state 198 "template" shift, and go to state 199 "*" shift, and go to state 364 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 470 (nested-name-specifier-opt)] TEMPLATE-opt go to state 200
214 declarator → noptr-declarator • parameters-and-qualifiers trailing-return-type 502 noptr-declarator → noptr-declarator • parameters-and-qualifiers 503 | noptr-declarator • "[" constant-expression-opt "]" attribute-specifier-seq-opt 564 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt 603 ptr-declarator → noptr-declarator • [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] "(" shift, and go to state 365 "[" shift, and go to state 366 "(" [reduce using rule 603 (ptr-declarator)] $default reduce using rule 603 (ptr-declarator) parameters-and-qualifiers go to state 367
213 declarator → ptr-declarator • $default reduce using rule 213 (declarator)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 139 class-name → • IDENTIFIER 140 | • simple-template-id 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 604 | ptr-operator • ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 347 ptr-declarator go to state 368 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", ":", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 144 class-specifier → class-head "{" • member-specification-opt "}" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 235 empty-declaration → • ";" 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 415 member-declaration → • attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" 416 | • function-definition 417 | • using-declaration 418 | • using-enum-declaration 419 | • static_assert-declaration 420 | • template-declaration 421 | • explicit-specialization 422 | • deduction-guide 423 | • alias-declaration 424 | • opaque-enum-declaration 425 | • empty-declaration 434 member-specification → • member-declaration member-specification-opt 435 | • access-specifier ":" member-specification-opt 436 member-specification-opt → • %empty ["}"] 437 | • member-specification 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 782 using-declaration → • "using" using-declarator-list ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "template" shift, and go to state 7 "private" shift, and go to state 369 "protected" shift, and go to state 370 "public" shift, and go to state 371 "using" shift, and go to state 10 ";" shift, and go to state 11 "enum" shift, and go to state 372 "explicit" shift, and go to state 23 "static_assert" shift, and go to state 41 IDENTIFIER reduce using rule 83 (attribute-specifier-seq-opt) IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] ";" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 436 (member-specification-opt) "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) access-specifier go to state 373 alias-declaration go to state 374 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 375 deduction-guide go to state 376 empty-declaration go to state 377 enum-key go to state 378 explicit-specialization go to state 379 explicit-specifier go to state 380 explicit-specifier-opt go to state 76 function-definition go to state 381 member-declaration go to state 382 member-specification go to state 383 member-specification-opt go to state 384 opaque-enum-declaration go to state 385 static_assert-declaration go to state 386 template-declaration go to state 387 template-head go to state 101 using-declaration go to state 388 using-enum-declaration go to state 389
84 attribute-specifier-seq-opt → attribute-specifier-seq • $default reduce using rule 84 (attribute-specifier-seq-opt)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 99 base-clause → • ":" base-specifier-list 100 base-clause-opt → • %empty ["{"] 101 | • base-clause 133 class-head → class-key attribute-specifier-seq-opt • class-head-name class-virt-specifier-opt base-clause-opt 134 | class-key attribute-specifier-seq-opt • base-clause-opt 135 class-head-name → • nested-name-specifier-opt class-name 139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 231 elaborated-type-specifier → class-key attribute-specifier-seq-opt • nested-name-specifier-opt IDENTIFIER 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 158 "[" shift, and go to state 162 ":" shift, and go to state 390 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] $default reduce using rule 100 (base-clause-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 base-clause go to state 391 base-clause-opt go to state 392 class-head-name go to state 393 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 394 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 233 elaborated-type-specifier → class-key nested-name-specifier • TEMPLATE-opt simple-template-id 467 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 468 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" IDENTIFIER shift, and go to state 198 "template" shift, and go to state 230 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] TEMPLATE-opt go to state 395
140 class-name → simple-template-id • ["::"] 232 elaborated-type-specifier → class-key simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 744 typedef-name → simple-template-id • ["::"] "::" reduce using rule 140 (class-name) "::" [reduce using rule 232 (elaborated-type-specifier)] "::" [reduce using rule 744 (typedef-name)] $default reduce using rule 232 (elaborated-type-specifier)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 191 decl-specifier-seq → decl-specifier attribute-specifier-seq-opt • [",", "...", IDENTIFIER, "noexcept", "::", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "&&", "operator", "decltype", "->", ">", "*", "requires", "~"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "alignas" [reduce using rule 191 (decl-specifier-seq)] "[" [reduce using rule 191 (decl-specifier-seq)] $default reduce using rule 191 (decl-specifier-seq) alignment-specifier go to state 166 attribute-specifier go to state 167
192 decl-specifier-seq → decl-specifier decl-specifier-seq • $default reduce using rule 192 (decl-specifier-seq)
117 brace-or-equal-initializer → • "=" initializer-clause 118 | • braced-init-list 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 351 init-declarator → declarator • initializer-opt 352 | declarator • requires-clause 362 initializer → • brace-or-equal-initializer 363 | • "(" expression-list ")" 368 initializer-opt → • %empty [",", ";"] 369 | • initializer 633 requires-clause → • "requires" constraint-logical-or-expression "=" shift, and go to state 396 "(" shift, and go to state 397 "{" shift, and go to state 398 "requires" shift, and go to state 399 $default reduce using rule 368 (initializer-opt) brace-or-equal-initializer go to state 400 braced-init-list go to state 401 initializer go to state 402 initializer-opt go to state 403 requires-clause go to state 404
353 init-declarator-list → init-declarator • $default reduce using rule 353 (init-declarator-list)
354 init-declarator-list → init-declarator-list • "," init-declarator 356 init-declarator-list-opt → init-declarator-list • [";"] "," shift, and go to state 405 $default reduce using rule 356 (init-declarator-list-opt)
652 simple-declaration → decl-specifier-seq init-declarator-list-opt • ";" ";" shift, and go to state 406
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 467 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 468 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 608 ptr-operator → nested-name-specifier • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt IDENTIFIER shift, and go to state 198 "template" shift, and go to state 230 "*" shift, and go to state 364 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] TEMPLATE-opt go to state 200
209 declaration-seq → declaration-seq declaration • $default reduce using rule 209 (declaration-seq)
466 nested-name-specifier → decltype-specifier "::" • $default reduce using rule 466 (nested-name-specifier)
249 enum-specifier → enum-head "{" • enumerator-list-opt "}" 250 | enum-head "{" • enumerator-list "," "}" 251 enumerator → • IDENTIFIER attribute-specifier-seq-opt 252 enumerator-definition → • enumerator 253 | • enumerator "=" constant-expression 254 enumerator-list → • enumerator-definition 255 | • enumerator-list "," enumerator-definition 256 enumerator-list-opt → • %empty ["}"] 257 | • enumerator-list IDENTIFIER shift, and go to state 407 $default reduce using rule 256 (enumerator-list-opt) enumerator go to state 408 enumerator-definition go to state 409 enumerator-list go to state 410 enumerator-list-opt go to state 411
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 241 enum-head → enum-key attribute-specifier-seq-opt • enum-head-name-opt enum-base-opt 242 enum-head-name → • nested-name-specifier-opt IDENTIFIER 243 enum-head-name-opt → • %empty [":", "{"] 244 | • enum-head-name 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → enum-key attribute-specifier-seq-opt • enum-head-name enum-base-opt ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] $default reduce using rule 243 (enum-head-name-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 class-name go to state 55 decltype-specifier go to state 121 enum-head-name go to state 412 enum-head-name-opt go to state 413 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 414 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
708 template-name → IDENTIFIER • $default reduce using rule 708 (template-name)
217 deduction-guide → explicit-specifier-opt template-name • "(" parameter-declaration-clause ")" "->" simple-template-id ";" "(" shift, and go to state 415
8 EXPORT-opt → "export" • $default reduce using rule 8 (EXPORT-opt)
438 module-declaration → EXPORT-opt • "module" module-name module-partition-opt attribute-specifier-seq-opt ";" "module" shift, and go to state 416
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 208 declaration-seq → • declaration 209 | • declaration-seq declaration 210 declaration-seq-opt → • %empty [$end, "module"] 211 | • declaration-seq 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 273 | • "export" "{" declaration-seq-opt "}" 274 | • "export" module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 395 | • "extern" string-literal declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 718 translation-unit → global-module-fragment-opt module-declaration • declaration-seq-opt private-module-fragment-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 $end reduce using rule 210 (declaration-seq-opt) "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "module" reduce using rule 210 (declaration-seq-opt) "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 417 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
465 nested-name-specifier → namespace-name "::" • $default reduce using rule 465 (nested-name-specifier)
467 nested-name-specifier → nested-name-specifier IDENTIFIER • "::" "::" shift, and go to state 418
22 TEMPLATE-opt → "template" • [IDENTIFIER, "operator", "~"] 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 658 simple-type-specifier → nested-name-specifier "template" • simple-template-id 708 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 192 IDENTIFIER [reduce using rule 22 (TEMPLATE-opt)] $default reduce using rule 22 (TEMPLATE-opt) simple-template-id go to state 419 template-name go to state 102
468 nested-name-specifier → nested-name-specifier TEMPLATE-opt • simple-template-id "::" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 192 simple-template-id go to state 420 template-name go to state 102
139 class-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 153 concept-name → IDENTIFIER • ["decltype", "<", "auto"] 248 enum-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 708 template-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 743 typedef-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "," reduce using rule 139 (class-name) "," [reduce using rule 248 (enum-name)] "," [reduce using rule 708 (template-name)] "," [reduce using rule 743 (typedef-name)] "constexpr" reduce using rule 139 (class-name) "constexpr" [reduce using rule 248 (enum-name)] "constexpr" [reduce using rule 708 (template-name)] "constexpr" [reduce using rule 743 (typedef-name)] "..." reduce using rule 139 (class-name) "..." [reduce using rule 248 (enum-name)] "..." [reduce using rule 708 (template-name)] "..." [reduce using rule 743 (typedef-name)] "export" reduce using rule 139 (class-name) "export" [reduce using rule 248 (enum-name)] "export" [reduce using rule 708 (template-name)] "export" [reduce using rule 743 (typedef-name)] "extern" reduce using rule 139 (class-name) "extern" [reduce using rule 248 (enum-name)] "extern" [reduce using rule 708 (template-name)] "extern" [reduce using rule 743 (typedef-name)] IDENTIFIER reduce using rule 139 (class-name) IDENTIFIER [reduce using rule 248 (enum-name)] IDENTIFIER [reduce using rule 708 (template-name)] IDENTIFIER [reduce using rule 743 (typedef-name)] "inline" reduce using rule 139 (class-name) "inline" [reduce using rule 248 (enum-name)] "inline" [reduce using rule 708 (template-name)] "inline" [reduce using rule 743 (typedef-name)] "noexcept" reduce using rule 139 (class-name) "noexcept" [reduce using rule 248 (enum-name)] "noexcept" [reduce using rule 708 (template-name)] "noexcept" [reduce using rule 743 (typedef-name)] "::" reduce using rule 139 (class-name) "::" [reduce using rule 248 (enum-name)] "::" [reduce using rule 708 (template-name)] "::" [reduce using rule 743 (typedef-name)] "template" reduce using rule 139 (class-name) "template" [reduce using rule 248 (enum-name)] "template" [reduce using rule 708 (template-name)] "template" [reduce using rule 743 (typedef-name)] "typename" reduce using rule 139 (class-name) "typename" [reduce using rule 248 (enum-name)] "typename" [reduce using rule 708 (template-name)] "typename" [reduce using rule 743 (typedef-name)] "virtual" reduce using rule 139 (class-name) "virtual" [reduce using rule 248 (enum-name)] "virtual" [reduce using rule 708 (template-name)] "virtual" [reduce using rule 743 (typedef-name)] "+" reduce using rule 139 (class-name) "+" [reduce using rule 248 (enum-name)] "+" [reduce using rule 708 (template-name)] "+" [reduce using rule 743 (typedef-name)] "-" reduce using rule 139 (class-name) "-" [reduce using rule 248 (enum-name)] "-" [reduce using rule 708 (template-name)] "-" [reduce using rule 743 (typedef-name)] "using" reduce using rule 139 (class-name) "using" [reduce using rule 248 (enum-name)] "using" [reduce using rule 708 (template-name)] "using" [reduce using rule 743 (typedef-name)] "=" reduce using rule 139 (class-name) "=" [reduce using rule 248 (enum-name)] "=" [reduce using rule 708 (template-name)] "=" [reduce using rule 743 (typedef-name)] ";" reduce using rule 139 (class-name) ";" [reduce using rule 248 (enum-name)] ";" [reduce using rule 708 (template-name)] ";" [reduce using rule 743 (typedef-name)] "alignas" reduce using rule 139 (class-name) "alignas" [reduce using rule 248 (enum-name)] "alignas" [reduce using rule 708 (template-name)] "alignas" [reduce using rule 743 (typedef-name)] "(" reduce using rule 139 (class-name) "(" [reduce using rule 248 (enum-name)] "(" [reduce using rule 708 (template-name)] "(" [reduce using rule 743 (typedef-name)] ")" reduce using rule 139 (class-name) ")" [reduce using rule 248 (enum-name)] ")" [reduce using rule 708 (template-name)] ")" [reduce using rule 743 (typedef-name)] "&" reduce using rule 139 (class-name) "&" [reduce using rule 248 (enum-name)] "&" [reduce using rule 708 (template-name)] "&" [reduce using rule 743 (typedef-name)] "asm" reduce using rule 139 (class-name) "asm" [reduce using rule 248 (enum-name)] "asm" [reduce using rule 708 (template-name)] "asm" [reduce using rule 743 (typedef-name)] "*=" reduce using rule 139 (class-name) "*=" [reduce using rule 248 (enum-name)] "*=" [reduce using rule 708 (template-name)] "*=" [reduce using rule 743 (typedef-name)] "/=" reduce using rule 139 (class-name) "/=" [reduce using rule 248 (enum-name)] "/=" [reduce using rule 708 (template-name)] "/=" [reduce using rule 743 (typedef-name)] "%=" reduce using rule 139 (class-name) "%=" [reduce using rule 248 (enum-name)] "%=" [reduce using rule 708 (template-name)] "%=" [reduce using rule 743 (typedef-name)] "+=" reduce using rule 139 (class-name) "+=" [reduce using rule 248 (enum-name)] "+=" [reduce using rule 708 (template-name)] "+=" [reduce using rule 743 (typedef-name)] "-=" reduce using rule 139 (class-name) "-=" [reduce using rule 248 (enum-name)] "-=" [reduce using rule 708 (template-name)] "-=" [reduce using rule 743 (typedef-name)] ">>=" reduce using rule 139 (class-name) ">>=" [reduce using rule 248 (enum-name)] ">>=" [reduce using rule 708 (template-name)] ">>=" [reduce using rule 743 (typedef-name)] "<<=" reduce using rule 139 (class-name) "<<=" [reduce using rule 248 (enum-name)] "<<=" [reduce using rule 708 (template-name)] "<<=" [reduce using rule 743 (typedef-name)] "&=" reduce using rule 139 (class-name) "&=" [reduce using rule 248 (enum-name)] "&=" [reduce using rule 708 (template-name)] "&=" [reduce using rule 743 (typedef-name)] "^=" reduce using rule 139 (class-name) "^=" [reduce using rule 248 (enum-name)] "^=" [reduce using rule 708 (template-name)] "^=" [reduce using rule 743 (typedef-name)] "|=" reduce using rule 139 (class-name) "|=" [reduce using rule 248 (enum-name)] "|=" [reduce using rule 708 (template-name)] "|=" [reduce using rule 743 (typedef-name)] "[" reduce using rule 139 (class-name) "[" [reduce using rule 248 (enum-name)] "[" [reduce using rule 708 (template-name)] "[" [reduce using rule 743 (typedef-name)] "]" reduce using rule 139 (class-name) "]" [reduce using rule 248 (enum-name)] "]" [reduce using rule 708 (template-name)] "]" [reduce using rule 743 (typedef-name)] ":" reduce using rule 139 (class-name) ":" [reduce using rule 248 (enum-name)] ":" [reduce using rule 708 (template-name)] ":" [reduce using rule 743 (typedef-name)] "{" reduce using rule 139 (class-name) "{" [reduce using rule 248 (enum-name)] "{" [reduce using rule 708 (template-name)] "{" [reduce using rule 743 (typedef-name)] "}" reduce using rule 139 (class-name) "}" [reduce using rule 248 (enum-name)] "}" [reduce using rule 708 (template-name)] "}" [reduce using rule 743 (typedef-name)] "class" reduce using rule 139 (class-name) "class" [reduce using rule 248 (enum-name)] "class" [reduce using rule 708 (template-name)] "class" [reduce using rule 743 (typedef-name)] "struct" reduce using rule 139 (class-name) "struct" [reduce using rule 248 (enum-name)] "struct" [reduce using rule 708 (template-name)] "struct" [reduce using rule 743 (typedef-name)] "union" reduce using rule 139 (class-name) "union" [reduce using rule 248 (enum-name)] "union" [reduce using rule 708 (template-name)] "union" [reduce using rule 743 (typedef-name)] "final" reduce using rule 139 (class-name) "final" [reduce using rule 248 (enum-name)] "final" [reduce using rule 708 (template-name)] "final" [reduce using rule 743 (typedef-name)] "<=>" reduce using rule 139 (class-name) "<=>" [reduce using rule 248 (enum-name)] "<=>" [reduce using rule 708 (template-name)] "<=>" [reduce using rule 743 (typedef-name)] "concept" reduce using rule 139 (class-name) "concept" [reduce using rule 248 (enum-name)] "concept" [reduce using rule 708 (template-name)] "concept" [reduce using rule 743 (typedef-name)] "?" reduce using rule 139 (class-name) "?" [reduce using rule 248 (enum-name)] "?" [reduce using rule 708 (template-name)] "?" [reduce using rule 743 (typedef-name)] "&&" reduce using rule 139 (class-name) "&&" [reduce using rule 248 (enum-name)] "&&" [reduce using rule 708 (template-name)] "&&" [reduce using rule 743 (typedef-name)] "||" reduce using rule 139 (class-name) "||" [reduce using rule 248 (enum-name)] "||" [reduce using rule 708 (template-name)] "||" [reduce using rule 743 (typedef-name)] "operator" reduce using rule 139 (class-name) "operator" [reduce using rule 248 (enum-name)] "operator" [reduce using rule 708 (template-name)] "operator" [reduce using rule 743 (typedef-name)] "const" reduce using rule 139 (class-name) "const" [reduce using rule 248 (enum-name)] "const" [reduce using rule 708 (template-name)] "const" [reduce using rule 743 (typedef-name)] "volatile" reduce using rule 139 (class-name) "volatile" [reduce using rule 248 (enum-name)] "volatile" [reduce using rule 708 (template-name)] "volatile" [reduce using rule 743 (typedef-name)] "friend" reduce using rule 139 (class-name) "friend" [reduce using rule 248 (enum-name)] "friend" [reduce using rule 708 (template-name)] "friend" [reduce using rule 743 (typedef-name)] "typedef" reduce using rule 139 (class-name) "typedef" [reduce using rule 248 (enum-name)] "typedef" [reduce using rule 708 (template-name)] "typedef" [reduce using rule 743 (typedef-name)] "consteval" reduce using rule 139 (class-name) "consteval" [reduce using rule 248 (enum-name)] "consteval" [reduce using rule 708 (template-name)] "consteval" [reduce using rule 743 (typedef-name)] "constinit" reduce using rule 139 (class-name) "constinit" [reduce using rule 248 (enum-name)] "constinit" [reduce using rule 708 (template-name)] "constinit" [reduce using rule 743 (typedef-name)] "decltype" reduce using rule 139 (class-name) "decltype" [reduce using rule 153 (concept-name)] "decltype" [reduce using rule 248 (enum-name)] "decltype" [reduce using rule 708 (template-name)] "decltype" [reduce using rule 743 (typedef-name)] "->" reduce using rule 139 (class-name) "->" [reduce using rule 248 (enum-name)] "->" [reduce using rule 708 (template-name)] "->" [reduce using rule 743 (typedef-name)] "." reduce using rule 139 (class-name) "." [reduce using rule 248 (enum-name)] "." [reduce using rule 708 (template-name)] "." [reduce using rule 743 (typedef-name)] "enum" reduce using rule 139 (class-name) "enum" [reduce using rule 248 (enum-name)] "enum" [reduce using rule 708 (template-name)] "enum" [reduce using rule 743 (typedef-name)] "==" reduce using rule 139 (class-name) "==" [reduce using rule 248 (enum-name)] "==" [reduce using rule 708 (template-name)] "==" [reduce using rule 743 (typedef-name)] "!=" reduce using rule 139 (class-name) "!=" [reduce using rule 248 (enum-name)] "!=" [reduce using rule 708 (template-name)] "!=" [reduce using rule 743 (typedef-name)] "^" reduce using rule 139 (class-name) "^" [reduce using rule 248 (enum-name)] "^" [reduce using rule 708 (template-name)] "^" [reduce using rule 743 (typedef-name)] "<" reduce using rule 139 (class-name) "<" [reduce using rule 153 (concept-name)] "<" [reduce using rule 248 (enum-name)] "<" [reduce using rule 708 (template-name)] "<" [reduce using rule 743 (typedef-name)] ">" reduce using rule 139 (class-name) ">" [reduce using rule 248 (enum-name)] ">" [reduce using rule 708 (template-name)] ">" [reduce using rule 743 (typedef-name)] "explicit" reduce using rule 139 (class-name) "explicit" [reduce using rule 248 (enum-name)] "explicit" [reduce using rule 708 (template-name)] "explicit" [reduce using rule 743 (typedef-name)] "*" reduce using rule 139 (class-name) "*" [reduce using rule 248 (enum-name)] "*" [reduce using rule 708 (template-name)] "*" [reduce using rule 743 (typedef-name)] "/" reduce using rule 139 (class-name) "/" [reduce using rule 248 (enum-name)] "/" [reduce using rule 708 (template-name)] "/" [reduce using rule 743 (typedef-name)] "%" reduce using rule 139 (class-name) "%" [reduce using rule 248 (enum-name)] "%" [reduce using rule 708 (template-name)] "%" [reduce using rule 743 (typedef-name)] "|" reduce using rule 139 (class-name) "|" [reduce using rule 248 (enum-name)] "|" [reduce using rule 708 (template-name)] "|" [reduce using rule 743 (typedef-name)] "<<" reduce using rule 139 (class-name) "<<" [reduce using rule 248 (enum-name)] "<<" [reduce using rule 708 (template-name)] "<<" [reduce using rule 743 (typedef-name)] ">>" reduce using rule 139 (class-name) ">>" [reduce using rule 248 (enum-name)] ">>" [reduce using rule 708 (template-name)] ">>" [reduce using rule 743 (typedef-name)] "<=" reduce using rule 139 (class-name) "<=" [reduce using rule 248 (enum-name)] "<=" [reduce using rule 708 (template-name)] "<=" [reduce using rule 743 (typedef-name)] ">=" reduce using rule 139 (class-name) ">=" [reduce using rule 248 (enum-name)] ">=" [reduce using rule 708 (template-name)] ">=" [reduce using rule 743 (typedef-name)] ".*" reduce using rule 139 (class-name) ".*" [reduce using rule 248 (enum-name)] ".*" [reduce using rule 708 (template-name)] ".*" [reduce using rule 743 (typedef-name)] "->*" reduce using rule 139 (class-name) "->*" [reduce using rule 248 (enum-name)] "->*" [reduce using rule 708 (template-name)] "->*" [reduce using rule 743 (typedef-name)] "try" reduce using rule 139 (class-name) "try" [reduce using rule 248 (enum-name)] "try" [reduce using rule 708 (template-name)] "try" [reduce using rule 743 (typedef-name)] "import" reduce using rule 139 (class-name) "import" [reduce using rule 248 (enum-name)] "import" [reduce using rule 708 (template-name)] "import" [reduce using rule 743 (typedef-name)] "namespace" reduce using rule 139 (class-name) "namespace" [reduce using rule 248 (enum-name)] "namespace" [reduce using rule 708 (template-name)] "namespace" [reduce using rule 743 (typedef-name)] "requires" reduce using rule 139 (class-name) "requires" [reduce using rule 248 (enum-name)] "requires" [reduce using rule 708 (template-name)] "requires" [reduce using rule 743 (typedef-name)] "~" reduce using rule 139 (class-name) "~" [reduce using rule 248 (enum-name)] "~" [reduce using rule 708 (template-name)] "~" [reduce using rule 743 (typedef-name)] "++" reduce using rule 139 (class-name) "++" [reduce using rule 248 (enum-name)] "++" [reduce using rule 708 (template-name)] "++" [reduce using rule 743 (typedef-name)] "--" reduce using rule 139 (class-name) "--" [reduce using rule 248 (enum-name)] "--" [reduce using rule 708 (template-name)] "--" [reduce using rule 743 (typedef-name)] "auto" reduce using rule 139 (class-name) "auto" [reduce using rule 153 (concept-name)] "auto" [reduce using rule 248 (enum-name)] "auto" [reduce using rule 708 (template-name)] "auto" [reduce using rule 743 (typedef-name)] "char" reduce using rule 139 (class-name) "char" [reduce using rule 248 (enum-name)] "char" [reduce using rule 708 (template-name)] "char" [reduce using rule 743 (typedef-name)] "char8_t" reduce using rule 139 (class-name) "char8_t" [reduce using rule 248 (enum-name)] "char8_t" [reduce using rule 708 (template-name)] "char8_t" [reduce using rule 743 (typedef-name)] "char16_t" reduce using rule 139 (class-name) "char16_t" [reduce using rule 248 (enum-name)] "char16_t" [reduce using rule 708 (template-name)] "char16_t" [reduce using rule 743 (typedef-name)] "char32_t" reduce using rule 139 (class-name) "char32_t" [reduce using rule 248 (enum-name)] "char32_t" [reduce using rule 708 (template-name)] "char32_t" [reduce using rule 743 (typedef-name)] "wchar_t" reduce using rule 139 (class-name) "wchar_t" [reduce using rule 248 (enum-name)] "wchar_t" [reduce using rule 708 (template-name)] "wchar_t" [reduce using rule 743 (typedef-name)] "bool" reduce using rule 139 (class-name) "bool" [reduce using rule 248 (enum-name)] "bool" [reduce using rule 708 (template-name)] "bool" [reduce using rule 743 (typedef-name)] "short" reduce using rule 139 (class-name) "short" [reduce using rule 248 (enum-name)] "short" [reduce using rule 708 (template-name)] "short" [reduce using rule 743 (typedef-name)] "int" reduce using rule 139 (class-name) "int" [reduce using rule 248 (enum-name)] "int" [reduce using rule 708 (template-name)] "int" [reduce using rule 743 (typedef-name)] "long" reduce using rule 139 (class-name) "long" [reduce using rule 248 (enum-name)] "long" [reduce using rule 708 (template-name)] "long" [reduce using rule 743 (typedef-name)] "signed" reduce using rule 139 (class-name) "signed" [reduce using rule 248 (enum-name)] "signed" [reduce using rule 708 (template-name)] "signed" [reduce using rule 743 (typedef-name)] "unsigned" reduce using rule 139 (class-name) "unsigned" [reduce using rule 248 (enum-name)] "unsigned" [reduce using rule 708 (template-name)] "unsigned" [reduce using rule 743 (typedef-name)] "float" reduce using rule 139 (class-name) "float" [reduce using rule 248 (enum-name)] "float" [reduce using rule 708 (template-name)] "float" [reduce using rule 743 (typedef-name)] "double" reduce using rule 139 (class-name) "double" [reduce using rule 248 (enum-name)] "double" [reduce using rule 708 (template-name)] "double" [reduce using rule 743 (typedef-name)] "void" reduce using rule 139 (class-name) "void" [reduce using rule 248 (enum-name)] "void" [reduce using rule 708 (template-name)] "void" [reduce using rule 743 (typedef-name)] "static_assert" reduce using rule 139 (class-name) "static_assert" [reduce using rule 248 (enum-name)] "static_assert" [reduce using rule 708 (template-name)] "static_assert" [reduce using rule 743 (typedef-name)] "static" reduce using rule 139 (class-name) "static" [reduce using rule 248 (enum-name)] "static" [reduce using rule 708 (template-name)] "static" [reduce using rule 743 (typedef-name)] "thread_local" reduce using rule 139 (class-name) "thread_local" [reduce using rule 248 (enum-name)] "thread_local" [reduce using rule 708 (template-name)] "thread_local" [reduce using rule 743 (typedef-name)] "mutable" reduce using rule 139 (class-name) "mutable" [reduce using rule 248 (enum-name)] "mutable" [reduce using rule 708 (template-name)] "mutable" [reduce using rule 743 (typedef-name)] "override" reduce using rule 139 (class-name) "override" [reduce using rule 248 (enum-name)] "override" [reduce using rule 708 (template-name)] "override" [reduce using rule 743 (typedef-name)] $default reduce using rule 139 (class-name)
720 type-constraint → nested-name-specifier-opt concept-name • [",", "...", IDENTIFIER, "=", ";", "decltype", ">", "auto"] 721 | nested-name-specifier-opt concept-name • "<" template-argument-list-opt ">" "<" shift, and go to state 421 $default reduce using rule 720 (type-constraint)
656 simple-template-id → template-name • "<" template-argument-list-opt ">" 661 simple-type-specifier → nested-name-specifier-opt template-name • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "<" shift, and go to state 208 "<" [reduce using rule 661 (simple-type-specifier)] $default reduce using rule 661 (simple-type-specifier)
657 simple-type-specifier → nested-name-specifier-opt type-name • $default reduce using rule 657 (simple-type-specifier)
152 concept-definition → "concept" • concept-name "=" constraint-expression ";" 153 concept-name → • IDENTIFIER IDENTIFIER shift, and go to state 422 concept-name go to state 423
703 template-declaration → template-head concept-definition • $default reduce using rule 703 (template-declaration)
702 template-declaration → template-head declaration • $default reduce using rule 702 (template-declaration)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 171 conversion-function-id → • "operator" conversion-type-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 656 | template-name "<" • template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 695 template-argument → • constant-expression 696 | • type-id 697 | • id-expression 698 template-argument-list → • template-argument ELLIPSIS-opt 699 | • template-argument-list "," template-argument ELLIPSIS-opt 700 template-argument-list-opt → • %empty [">"] 701 | • template-argument-list 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] ">" reduce using rule 700 (template-argument-list-opt) "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-key go to state 424 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 425 conversion-function-id go to state 282 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 426 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 427 string-literal go to state 313 template-argument go to state 428 template-argument-list go to state 429 template-argument-list-opt go to state 430 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 431 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
566 placeholder-type-specifier → type-constraint-opt "decltype" • "(" "auto" ")" "(" shift, and go to state 435
565 placeholder-type-specifier → type-constraint-opt "auto" • $default reduce using rule 565 (placeholder-type-specifier)
464 nested-name-specifier → type-name "::" • $default reduce using rule 464 (nested-name-specifier)
0 $accept → result $end • $default accept
273 export-declaration → "export" "{" declaration-seq-opt • "}" "}" shift, and go to state 436
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 208 declaration-seq → • declaration 209 | • declaration-seq declaration 210 declaration-seq-opt → • %empty ["}"] 211 | • declaration-seq 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 273 | • "export" "{" declaration-seq-opt "}" 274 | • "export" module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 394 | "extern" string-literal "{" • declaration-seq-opt "}" 395 | • "extern" string-literal declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 210 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 437 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
395 linkage-specification → "extern" string-literal declaration • $default reduce using rule 395 (linkage-specification)
704 template-head → "template" • "<" template-parameter-list ">" requires-clause-opt "<" shift, and go to state 438
735 type-parameter-key → "typename" • $default reduce using rule 735 (type-parameter-key)
734 type-parameter-key → "class" • $default reduce using rule 734 (type-parameter-key)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 267 explicit-specialization → • "template" "<" ">" declaration 267 | "template" "<" ">" • declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 273 | • "export" "{" declaration-seq-opt "}" 274 | • "export" module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 395 | • "extern" string-literal declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 439 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
23 THIS-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 24 | • "this" 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 554 parameter-declaration → attribute-specifier-seq-opt • THIS-opt decl-specifier-seq declarator 555 | attribute-specifier-seq-opt • THIS-opt decl-specifier-seq declarator "=" initializer-clause 556 | attribute-specifier-seq-opt • THIS-opt decl-specifier-seq abstract-declarator-opt 557 | attribute-specifier-seq-opt • THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause "this" shift, and go to state 440 "alignas" shift, and go to state 158 "[" shift, and go to state 162 $default reduce using rule 23 (THIS-opt) THIS-opt go to state 441 alignment-specifier go to state 166 attribute-specifier go to state 167
153 concept-name → • IDENTIFIER 720 type-constraint → nested-name-specifier-opt • concept-name 721 | nested-name-specifier-opt • concept-name "<" template-argument-list-opt ">" IDENTIFIER shift, and go to state 422 concept-name go to state 202
710 template-parameter → parameter-declaration • $default reduce using rule 710 (template-parameter)
732 type-parameter → template-head • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 733 | template-head • type-parameter-key IDENTIFIER-opt "=" id-expression 734 type-parameter-key → • "class" 735 | • "typename" "typename" shift, and go to state 217 "class" shift, and go to state 218 type-parameter-key go to state 442
711 template-parameter-list → template-parameter • $default reduce using rule 711 (template-parameter-list)
704 template-head → "template" "<" template-parameter-list • ">" requires-clause-opt 712 template-parameter-list → template-parameter-list • "," template-parameter "," shift, and go to state 443 ">" shift, and go to state 444
5 ELLIPSIS-opt → • %empty [",", IDENTIFIER, ">"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["="] 12 | • IDENTIFIER 730 type-parameter → type-constraint • ELLIPSIS-opt IDENTIFIER-opt 731 | type-constraint • IDENTIFIER-opt "=" type-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 445 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "=" reduce using rule 11 (IDENTIFIER-opt) $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 446 IDENTIFIER-opt go to state 447
709 template-parameter → type-parameter • $default reduce using rule 709 (template-parameter)
5 ELLIPSIS-opt → • %empty [",", IDENTIFIER, ">"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["="] 12 | • IDENTIFIER 728 type-parameter → type-parameter-key • ELLIPSIS-opt IDENTIFIER-opt 729 | type-parameter-key • IDENTIFIER-opt "=" type-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 445 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "=" reduce using rule 11 (IDENTIFIER-opt) $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 448 IDENTIFIER-opt go to state 449
467 nested-name-specifier → nested-name-specifier IDENTIFIER • "::" 745 typename-specifier → "typename" nested-name-specifier IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" shift, and go to state 418 "::" [reduce using rule 745 (typename-specifier)] $default reduce using rule 745 (typename-specifier)
22 TEMPLATE-opt → "template" • $default reduce using rule 22 (TEMPLATE-opt)
468 nested-name-specifier → nested-name-specifier TEMPLATE-opt • simple-template-id "::" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 746 typename-specifier → "typename" nested-name-specifier TEMPLATE-opt • simple-template-id IDENTIFIER shift, and go to state 192 simple-template-id go to state 450 template-name go to state 102
44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt • "=" defining-type-id ";" 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier "=" shift, and go to state 451 "alignas" shift, and go to state 158 "[" shift, and go to state 162 alignment-specifier go to state 166 attribute-specifier go to state 167
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 171 conversion-function-id → • "operator" conversion-type-id 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 467 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 468 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 783 using-declarator → TYPENAME-opt nested-name-specifier • unqualified-id IDENTIFIER shift, and go to state 452 "template" shift, and go to state 230 "operator" shift, and go to state 251 "~" shift, and go to state 354 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] TEMPLATE-opt go to state 200 conversion-function-id go to state 282 literal-operator-id go to state 295 operator-function-id go to state 302 simple-template-id go to state 453 template-id go to state 314 template-name go to state 102 unqualified-id go to state 454
787 using-enum-declaration → "using" elaborated-enum-specifier ";" • $default reduce using rule 787 (using-enum-declaration)
784 using-declarator-list → using-declarator ELLIPSIS-opt • $default reduce using rule 784 (using-declarator-list)
25 TYPENAME-opt → • %empty [IDENTIFIER, "::", "decltype"] 26 | • "typename" 783 using-declarator → • TYPENAME-opt nested-name-specifier unqualified-id 785 using-declarator-list → using-declarator-list "," • using-declarator ELLIPSIS-opt "typename" shift, and go to state 124 $default reduce using rule 25 (TYPENAME-opt) TYPENAME-opt go to state 126 using-declarator go to state 455
782 using-declaration → "using" using-declarator-list ";" • $default reduce using rule 782 (using-declaration)
139 class-name → IDENTIFIER • ["::"] 248 enum-name → IDENTIFIER • ["::"] 455 namespace-alias → IDENTIFIER • ["::"] 461 namespace-name → IDENTIFIER • ["::"] 708 template-name → IDENTIFIER • ["<"] 743 typedef-name → IDENTIFIER • ["::"] 767 unqualified-id → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" reduce using rule 139 (class-name) "::" [reduce using rule 248 (enum-name)] "::" [reduce using rule 455 (namespace-alias)] "::" [reduce using rule 461 (namespace-name)] "::" [reduce using rule 743 (typedef-name)] "::" [reduce using rule 767 (unqualified-id)] "<" reduce using rule 708 (template-name) "<" [reduce using rule 767 (unqualified-id)] $default reduce using rule 767 (unqualified-id)
488 noexcept-expression → "noexcept" • "(" expression ")" "(" shift, and go to state 456
764 unary-operator → "!" • $default reduce using rule 764 (unary-operator)
20 SCOPE-opt → "::" • ["delete", "new"] 463 nested-name-specifier → "::" • [IDENTIFIER, "template", "operator", "~"] "delete" reduce using rule 20 (SCOPE-opt) "new" reduce using rule 20 (SCOPE-opt) $default reduce using rule 463 (nested-name-specifier)
590 primary-expression → "this" • $default reduce using rule 590 (primary-expression)
762 unary-operator → "+" • $default reduce using rule 762 (unary-operator)
763 unary-operator → "-" • $default reduce using rule 763 (unary-operator)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 131 | "(" • type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 288 | "(" • cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 289 | "(" • "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 290 | "(" • cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 591 | "(" • expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list "..." shift, and go to state 457 IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 458 character-literal go to state 279 class-key go to state 424 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 459 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 427 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 460 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
761 unary-operator → "&" • $default reduce using rule 761 (unary-operator)
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 124 capture → • simple-capture 125 | • init-capture 126 capture-default → • "&" 127 | • "=" 128 capture-list → • capture 129 | • capture-list "," capture 349 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 350 | • "&" ELLIPSIS-opt IDENTIFIER initializer 383 lambda-capture → • capture-default 384 | • capture-list 385 | • capture-default "," capture-list 386 lambda-capture-opt → • %empty ["]"] 387 | • lambda-capture 392 lambda-introducer → "[" • lambda-capture-opt "]" 648 simple-capture → • IDENTIFIER ELLIPSIS-opt 649 | • "&" IDENTIFIER ELLIPSIS-opt 650 | • "this" 651 | • "*" "this" "..." shift, and go to state 156 IDENTIFIER shift, and go to state 461 "this" shift, and go to state 462 "=" shift, and go to state 463 "&" shift, and go to state 464 "*" shift, and go to state 465 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 386 (lambda-capture-opt) ELLIPSIS-opt go to state 466 capture go to state 467 capture-default go to state 468 capture-list go to state 469 init-capture go to state 470 lambda-capture go to state 471 lambda-capture-opt go to state 472 simple-capture go to state 473
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 90 | "co_await" • cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 474 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
116 boolean-literal → BOOLEAN_LITERAL • $default reduce using rule 116 (boolean-literal)
132 character-literal → CHARACTER_LITERAL • $default reduce using rule 132 (character-literal)
136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → "operator" • conversion-type-id 172 conversion-type-id → • type-specifier-seq conversion-declarator-opt 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 403 literal-operator-id → "operator" • string-literal IDENTIFIER 404 | "operator" • user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 508 operator-function-id → "operator" • overloadable-operator 509 | "operator" • overloadable-operator "<" template-argument-list-opt ">" 510 overloadable-operator → • "new" 511 | • "delete" 512 | • "new" "[" "]" 513 | • "delete" "[" "]" 514 | • "co_await" 515 | • "(" ")" 516 | • "[" "]" 517 | • "->" 518 | • "->*" 519 | • "~" 520 | • "!" 521 | • "+" 522 | • "-" 523 | • "*" 524 | • "/" 525 | • "%" 526 | • "^" 527 | • "&" 528 | • "|" 529 | • "=" 530 | • "+=" 531 | • "-=" 532 | • "*=" 533 | • "/=" 534 | • "%=" 535 | • "^=" 536 | • "&=" 537 | • "|=" 538 | • "==" 539 | • "!=" 540 | • "<" 541 | • ">" 542 | • "<=" 543 | • ">=" 544 | • "<=>" 545 | • "&&" 546 | • "||" 547 | • "<<" 548 | • ">>" 549 | • "<<=" 550 | • ">>=" 551 | • "++" 552 | • "--" 553 | • "," 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 781 user-defined-string-literal → • string-literal ud-suffix "," shift, and go to state 475 IDENTIFIER shift, and go to state 4 "!" shift, and go to state 476 "::" shift, and go to state 6 "typename" shift, and go to state 8 "+" shift, and go to state 477 "-" shift, and go to state 478 "=" shift, and go to state 479 "(" shift, and go to state 480 "&" shift, and go to state 481 "*=" shift, and go to state 482 "/=" shift, and go to state 483 "%=" shift, and go to state 484 "+=" shift, and go to state 485 "-=" shift, and go to state 486 ">>=" shift, and go to state 487 "<<=" shift, and go to state 488 "&=" shift, and go to state 489 "^=" shift, and go to state 490 "|=" shift, and go to state 491 "[" shift, and go to state 492 "co_await" shift, and go to state 493 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "<=>" shift, and go to state 494 "&&" shift, and go to state 495 "||" shift, and go to state 496 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "->" shift, and go to state 497 "delete" shift, and go to state 498 "enum" shift, and go to state 125 "==" shift, and go to state 499 "!=" shift, and go to state 500 "^" shift, and go to state 501 "<" shift, and go to state 502 ">" shift, and go to state 503 "*" shift, and go to state 504 "/" shift, and go to state 505 "%" shift, and go to state 506 "|" shift, and go to state 507 "<<" shift, and go to state 508 ">>" shift, and go to state 509 "<=" shift, and go to state 510 ">=" shift, and go to state 511 "->*" shift, and go to state 512 "new" shift, and go to state 513 "~" shift, and go to state 514 "++" shift, and go to state 515 "--" shift, and go to state 516 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) class-key go to state 424 class-name go to state 55 conversion-type-id go to state 517 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 overloadable-operator go to state 518 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 string-literal go to state 519 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 520 typedef-name go to state 108 typename-specifier go to state 109 user-defined-string-literal go to state 521
287 floating-point-literal → FLOATING_POINT_LITERAL • $default reduce using rule 287 (floating-point-literal)
760 unary-operator → "*" • $default reduce using rule 760 (unary-operator)
370 integer-literal → INTEGER_LITERAL • $default reduce using rule 370 (integer-literal)
628 requirement-parameter-list → • "(" parameter-declaration-clause ")" 629 requirement-parameter-list-opt → • %empty ["{"] 630 | • requirement-parameter-list 636 requires-expression → "requires" • requirement-parameter-list-opt requirement-body "(" shift, and go to state 522 $default reduce using rule 629 (requirement-parameter-list-opt) requirement-parameter-list go to state 523 requirement-parameter-list-opt go to state 524
139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 765 unary-operator → "~" • [IDENTIFIER, "noexcept", "!", "::", "this", "typename", "+", "-", "(", "&", "[", "co_await", BOOLEAN_LITERAL, CHARACTER_LITERAL, "operator", "decltype", "delete", FLOATING_POINT_LITERAL, "*", INTEGER_LITERAL, "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", STRING_LITERAL, "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL] 771 unqualified-id → "~" • type-name 772 | "~" • decltype-specifier IDENTIFIER shift, and go to state 525 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 765 (unary-operator)] "decltype" [reduce using rule 765 (unary-operator)] $default reduce using rule 765 (unary-operator) class-name go to state 55 decltype-specifier go to state 526 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 102 type-name go to state 527 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 750 | "++" • cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 528 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 751 | "--" • cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 529 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
570 pointer-literal → POINTER_LITERAL • $default reduce using rule 570 (pointer-literal)
582 postfix-expression → "dynamic_cast" • "<" type-id ">" "(" expression ")" "<" shift, and go to state 530
583 postfix-expression → "static_cast" • "<" type-id ">" "(" expression ")" "<" shift, and go to state 531
584 postfix-expression → "reinterpret_cast" • "<" type-id ">" "(" expression ")" "<" shift, and go to state 532
585 postfix-expression → "const_cast" • "<" type-id ">" "(" expression ")" "<" shift, and go to state 533
586 postfix-expression → "typeid" • "(" expression ")" 587 | "typeid" • "(" type-id ")" "(" shift, and go to state 534
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 54 assignment-expression-opt → • %empty [",", "...", "=", ";", ")", "]", ":", "{", "}", ">"] 55 | • assignment-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 713 | "throw" • assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 54 (assignment-expression-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 535 assignment-expression-opt go to state 536 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 753 | "sizeof" • unary-expression 754 | • "sizeof" "(" type-id ")" 754 | "sizeof" • "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 755 | "sizeof" • "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix "..." shift, and go to state 537 IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 538 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 539 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
756 unary-expression → "alignof" • "(" type-id ")" "(" shift, and go to state 540
774 user-defined-character-literal → USER_DEFINED_CHARACTER_LITERAL • $default reduce using rule 774 (user-defined-character-literal)
775 user-defined-floating-point-literal → USER_DEFINED_FLOATING_POINT_LITERAL • $default reduce using rule 775 (user-defined-floating-point-literal)
776 user-defined-integer-literal → USER_DEFINED_INTEGER_LITERAL • $default reduce using rule 776 (user-defined-integer-literal)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 794 | "co_yield" • assignment-expression 795 | • "co_yield" braced-init-list 795 | "co_yield" • braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 541 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 542 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
224 delete-expression → SCOPE-opt • "delete" cast-expression 225 | SCOPE-opt • "delete" "[" "]" cast-expression 477 new-expression → SCOPE-opt • "new" new-placement-opt new-type-id new-initializer-opt 478 | SCOPE-opt • "new" new-placement-opt "(" type-id ")" new-initializer-opt "delete" shift, and go to state 543 "new" shift, and go to state 544
42 additive-expression → additive-expression • "+" multiplicative-expression 43 | additive-expression • "-" multiplicative-expression 645 shift-expression → additive-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] "+" shift, and go to state 545 "-" shift, and go to state 546 $default reduce using rule 645 (shift-expression)
48 and-expression → and-expression • "&" equality-expression 264 exclusive-or-expression → and-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "^", ">", "|"] "&" shift, and go to state 547 $default reduce using rule 264 (exclusive-or-expression)
279 expression → assignment-expression • $default reduce using rule 279 (expression)
752 unary-expression → await-expression • $default reduce using rule 752 (unary-expression)
400 literal → boolean-literal • $default reduce using rule 400 (literal)
567 pm-expression → cast-expression • $default reduce using rule 567 (pm-expression)
397 literal → character-literal • $default reduce using rule 397 (literal)
149 compare-expression → compare-expression • "<=>" shift-expression 618 relational-expression → compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 548 $default reduce using rule 618 (relational-expression)
50 assignment-expression → conditional-expression • $default reduce using rule 50 (assignment-expression)
769 unqualified-id → conversion-function-id • $default reduce using rule 769 (unqualified-id)
759 unary-expression → delete-expression • $default reduce using rule 759 (unary-expression)
47 and-expression → equality-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "^", ">", "|"] 259 equality-expression → equality-expression • "==" relational-expression 260 | equality-expression • "!=" relational-expression "==" shift, and go to state 549 "!=" shift, and go to state 550 $default reduce using rule 47 (and-expression)
265 exclusive-or-expression → exclusive-or-expression • "^" and-expression 347 inclusive-or-expression → exclusive-or-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", ">", "|"] "^" shift, and go to state 551 $default reduce using rule 347 (inclusive-or-expression)
216 decltype-specifier → "decltype" "(" expression • ")" 280 expression → expression • "," assignment-expression "," shift, and go to state 552 ")" shift, and go to state 553
398 literal → floating-point-literal • $default reduce using rule 398 (literal)
594 primary-expression → fold-expression • $default reduce using rule 594 (primary-expression)
592 primary-expression → id-expression • $default reduce using rule 592 (primary-expression)
348 inclusive-or-expression → inclusive-or-expression • "|" exclusive-or-expression 405 logical-and-expression → inclusive-or-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", ">"] "|" shift, and go to state 554 $default reduce using rule 405 (logical-and-expression)
396 literal → integer-literal • $default reduce using rule 396 (literal)
593 primary-expression → lambda-expression • $default reduce using rule 593 (primary-expression)
133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 193 decl-specifier-seq-opt → • %empty ["noexcept", "alignas", "[", "{", "->"] 194 | • decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 388 lambda-declarator → • lambda-specifiers 389 | • "(" parameter-declaration-clause ")" lambda-specifiers requires-clause-opt 390 lambda-expression → lambda-introducer • lambda-declarator compound-statement 391 | lambda-introducer • "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 393 lambda-specifiers → • decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "(" shift, and go to state 555 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "<" shift, and go to state 556 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 193 (decl-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 557 decl-specifier-seq-opt go to state 558 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 lambda-declarator go to state 559 lambda-specifiers go to state 560 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
588 primary-expression → literal • $default reduce using rule 588 (primary-expression)
707 template-id → literal-operator-id • "<" template-argument-list-opt ">" 770 unqualified-id → literal-operator-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "<" shift, and go to state 561 "<" [reduce using rule 770 (unqualified-id)] $default reduce using rule 770 (unqualified-id)
406 logical-and-expression → logical-and-expression • "&&" inclusive-or-expression 407 logical-or-expression → logical-and-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "||", ">"] "&&" shift, and go to state 562 $default reduce using rule 407 (logical-or-expression)
53 assignment-expression → logical-or-expression • assignment-operator initializer-clause 56 assignment-operator → • "=" 57 | • "*=" 58 | • "/=" 59 | • "%=" 60 | • "+=" 61 | • "-=" 62 | • ">>=" 63 | • "<<=" 64 | • "&=" 65 | • "^=" 66 | • "|=" 158 conditional-expression → logical-or-expression • [",", "...", "=", ";", ")", "]", ":", "{", "}", ">"] 159 | logical-or-expression • "?" expression ":" assignment-expression 408 logical-or-expression → logical-or-expression • "||" logical-and-expression "=" shift, and go to state 563 "*=" shift, and go to state 564 "/=" shift, and go to state 565 "%=" shift, and go to state 566 "+=" shift, and go to state 567 "-=" shift, and go to state 568 ">>=" shift, and go to state 569 "<<=" shift, and go to state 570 "&=" shift, and go to state 571 "^=" shift, and go to state 572 "|=" shift, and go to state 573 "?" shift, and go to state 574 "||" shift, and go to state 575 "=" [reduce using rule 158 (conditional-expression)] $default reduce using rule 158 (conditional-expression) assignment-operator go to state 576
41 additive-expression → multiplicative-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] 451 multiplicative-expression → multiplicative-expression • "*" pm-expression 452 | multiplicative-expression • "/" pm-expression 453 | multiplicative-expression • "%" pm-expression "*" shift, and go to state 577 "/" shift, and go to state 578 "%" shift, and go to state 579 $default reduce using rule 41 (additive-expression)
21 TEMPLATE-opt → • %empty [IDENTIFIER, "operator", "~"] 22 | • "template" 467 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 468 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 470 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] 612 qualified-id → nested-name-specifier • TEMPLATE-opt unqualified-id 658 simple-type-specifier → nested-name-specifier • "template" simple-template-id IDENTIFIER shift, and go to state 198 "template" shift, and go to state 199 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 470 (nested-name-specifier-opt)] $default reduce using rule 21 (TEMPLATE-opt) TEMPLATE-opt go to state 580
758 unary-expression → new-expression • $default reduce using rule 758 (unary-expression)
757 unary-expression → noexcept-expression • $default reduce using rule 757 (unary-expression)
706 template-id → operator-function-id • "<" template-argument-list-opt ">" 768 unqualified-id → operator-function-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "<" shift, and go to state 581 "<" [reduce using rule 768 (unqualified-id)] $default reduce using rule 768 (unqualified-id)
450 multiplicative-expression → pm-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">="] 568 pm-expression → pm-expression • ".*" cast-expression 569 | pm-expression • "->*" cast-expression ".*" shift, and go to state 582 "->*" shift, and go to state 583 $default reduce using rule 450 (multiplicative-expression)
401 literal → pointer-literal • $default reduce using rule 401 (literal)
572 postfix-expression → postfix-expression • "[" expression-list-opt "]" 573 | postfix-expression • "(" expression-list-opt ")" 578 | postfix-expression • "." TEMPLATE-opt id-expression 579 | postfix-expression • "->" TEMPLATE-opt id-expression 580 | postfix-expression • "++" 581 | postfix-expression • "--" 748 unary-expression → postfix-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] "(" shift, and go to state 584 "[" shift, and go to state 585 "->" shift, and go to state 586 "." shift, and go to state 587 "++" shift, and go to state 588 "--" shift, and go to state 589 $default reduce using rule 748 (unary-expression)
571 postfix-expression → primary-expression • $default reduce using rule 571 (postfix-expression)
344 id-expression → qualified-id • $default reduce using rule 344 (id-expression)
258 equality-expression → relational-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", ">", "|"] 619 relational-expression → relational-expression • "<" compare-expression 620 | relational-expression • ">" compare-expression 621 | relational-expression • "<=" compare-expression 622 | relational-expression • ">=" compare-expression "<" shift, and go to state 590 ">" shift, and go to state 591 "<=" shift, and go to state 592 ">=" shift, and go to state 593 ">" [reduce using rule 258 (equality-expression)] $default reduce using rule 258 (equality-expression)
595 primary-expression → requires-expression • $default reduce using rule 595 (primary-expression)
148 compare-expression → shift-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] 646 shift-expression → shift-expression • "<<" additive-expression 647 | shift-expression • ">>" additive-expression "<<" shift, and go to state 594 ">>" shift, and go to state 595 $default reduce using rule 148 (compare-expression)
140 class-name → simple-template-id • ["::"] 705 template-id → simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 744 typedef-name → simple-template-id • ["::"] "::" reduce using rule 140 (class-name) "::" [reduce using rule 705 (template-id)] "::" [reduce using rule 744 (typedef-name)] $default reduce using rule 705 (template-id)
121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 574 postfix-expression → simple-type-specifier • "(" expression-list-opt ")" 576 | simple-type-specifier • braced-init-list "(" shift, and go to state 596 "{" shift, and go to state 398 braced-init-list go to state 597
399 literal → string-literal • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] 589 primary-expression → string-literal • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] 747 ud-suffix → • IDENTIFIER 781 user-defined-string-literal → string-literal • ud-suffix IDENTIFIER shift, and go to state 598 "," reduce using rule 399 (literal) "," [reduce using rule 589 (primary-expression)] "constexpr" reduce using rule 399 (literal) "constexpr" [reduce using rule 589 (primary-expression)] "..." reduce using rule 399 (literal) "..." [reduce using rule 589 (primary-expression)] "export" reduce using rule 399 (literal) "export" [reduce using rule 589 (primary-expression)] "extern" reduce using rule 399 (literal) "extern" [reduce using rule 589 (primary-expression)] IDENTIFIER [reduce using rule 399 (literal)] IDENTIFIER [reduce using rule 589 (primary-expression)] "inline" reduce using rule 399 (literal) "inline" [reduce using rule 589 (primary-expression)] "noexcept" reduce using rule 399 (literal) "noexcept" [reduce using rule 589 (primary-expression)] "::" reduce using rule 399 (literal) "::" [reduce using rule 589 (primary-expression)] "template" reduce using rule 399 (literal) "template" [reduce using rule 589 (primary-expression)] "typename" reduce using rule 399 (literal) "typename" [reduce using rule 589 (primary-expression)] "virtual" reduce using rule 399 (literal) "virtual" [reduce using rule 589 (primary-expression)] "+" reduce using rule 399 (literal) "+" [reduce using rule 589 (primary-expression)] "-" reduce using rule 399 (literal) "-" [reduce using rule 589 (primary-expression)] "using" reduce using rule 399 (literal) "using" [reduce using rule 589 (primary-expression)] "=" reduce using rule 399 (literal) "=" [reduce using rule 589 (primary-expression)] ";" reduce using rule 399 (literal) ";" [reduce using rule 589 (primary-expression)] "alignas" reduce using rule 399 (literal) "alignas" [reduce using rule 589 (primary-expression)] "(" reduce using rule 399 (literal) "(" [reduce using rule 589 (primary-expression)] ")" reduce using rule 399 (literal) ")" [reduce using rule 589 (primary-expression)] "&" reduce using rule 399 (literal) "&" [reduce using rule 589 (primary-expression)] "asm" reduce using rule 399 (literal) "asm" [reduce using rule 589 (primary-expression)] "*=" reduce using rule 399 (literal) "*=" [reduce using rule 589 (primary-expression)] "/=" reduce using rule 399 (literal) "/=" [reduce using rule 589 (primary-expression)] "%=" reduce using rule 399 (literal) "%=" [reduce using rule 589 (primary-expression)] "+=" reduce using rule 399 (literal) "+=" [reduce using rule 589 (primary-expression)] "-=" reduce using rule 399 (literal) "-=" [reduce using rule 589 (primary-expression)] ">>=" reduce using rule 399 (literal) ">>=" [reduce using rule 589 (primary-expression)] "<<=" reduce using rule 399 (literal) "<<=" [reduce using rule 589 (primary-expression)] "&=" reduce using rule 399 (literal) "&=" [reduce using rule 589 (primary-expression)] "^=" reduce using rule 399 (literal) "^=" [reduce using rule 589 (primary-expression)] "|=" reduce using rule 399 (literal) "|=" [reduce using rule 589 (primary-expression)] "[" reduce using rule 399 (literal) "[" [reduce using rule 589 (primary-expression)] "]" reduce using rule 399 (literal) "]" [reduce using rule 589 (primary-expression)] ":" reduce using rule 399 (literal) ":" [reduce using rule 589 (primary-expression)] "{" reduce using rule 399 (literal) "{" [reduce using rule 589 (primary-expression)] "}" reduce using rule 399 (literal) "}" [reduce using rule 589 (primary-expression)] "class" reduce using rule 399 (literal) "class" [reduce using rule 589 (primary-expression)] "struct" reduce using rule 399 (literal) "struct" [reduce using rule 589 (primary-expression)] "union" reduce using rule 399 (literal) "union" [reduce using rule 589 (primary-expression)] "<=>" reduce using rule 399 (literal) "<=>" [reduce using rule 589 (primary-expression)] "concept" reduce using rule 399 (literal) "concept" [reduce using rule 589 (primary-expression)] "?" reduce using rule 399 (literal) "?" [reduce using rule 589 (primary-expression)] "&&" reduce using rule 399 (literal) "&&" [reduce using rule 589 (primary-expression)] "||" reduce using rule 399 (literal) "||" [reduce using rule 589 (primary-expression)] "operator" reduce using rule 399 (literal) "operator" [reduce using rule 589 (primary-expression)] "const" reduce using rule 399 (literal) "const" [reduce using rule 589 (primary-expression)] "volatile" reduce using rule 399 (literal) "volatile" [reduce using rule 589 (primary-expression)] "friend" reduce using rule 399 (literal) "friend" [reduce using rule 589 (primary-expression)] "typedef" reduce using rule 399 (literal) "typedef" [reduce using rule 589 (primary-expression)] "consteval" reduce using rule 399 (literal) "consteval" [reduce using rule 589 (primary-expression)] "constinit" reduce using rule 399 (literal) "constinit" [reduce using rule 589 (primary-expression)] "decltype" reduce using rule 399 (literal) "decltype" [reduce using rule 589 (primary-expression)] "->" reduce using rule 399 (literal) "->" [reduce using rule 589 (primary-expression)] "." reduce using rule 399 (literal) "." [reduce using rule 589 (primary-expression)] "enum" reduce using rule 399 (literal) "enum" [reduce using rule 589 (primary-expression)] "==" reduce using rule 399 (literal) "==" [reduce using rule 589 (primary-expression)] "!=" reduce using rule 399 (literal) "!=" [reduce using rule 589 (primary-expression)] "^" reduce using rule 399 (literal) "^" [reduce using rule 589 (primary-expression)] "<" reduce using rule 399 (literal) "<" [reduce using rule 589 (primary-expression)] ">" reduce using rule 399 (literal) ">" [reduce using rule 589 (primary-expression)] "explicit" reduce using rule 399 (literal) "explicit" [reduce using rule 589 (primary-expression)] "*" reduce using rule 399 (literal) "*" [reduce using rule 589 (primary-expression)] "/" reduce using rule 399 (literal) "/" [reduce using rule 589 (primary-expression)] "%" reduce using rule 399 (literal) "%" [reduce using rule 589 (primary-expression)] "|" reduce using rule 399 (literal) "|" [reduce using rule 589 (primary-expression)] "<<" reduce using rule 399 (literal) "<<" [reduce using rule 589 (primary-expression)] ">>" reduce using rule 399 (literal) ">>" [reduce using rule 589 (primary-expression)] "<=" reduce using rule 399 (literal) "<=" [reduce using rule 589 (primary-expression)] ">=" reduce using rule 399 (literal) ">=" [reduce using rule 589 (primary-expression)] ".*" reduce using rule 399 (literal) ".*" [reduce using rule 589 (primary-expression)] "->*" reduce using rule 399 (literal) "->*" [reduce using rule 589 (primary-expression)] "try" reduce using rule 399 (literal) "try" [reduce using rule 589 (primary-expression)] "import" reduce using rule 399 (literal) "import" [reduce using rule 589 (primary-expression)] "namespace" reduce using rule 399 (literal) "namespace" [reduce using rule 589 (primary-expression)] "~" reduce using rule 399 (literal) "~" [reduce using rule 589 (primary-expression)] "++" reduce using rule 399 (literal) "++" [reduce using rule 589 (primary-expression)] "--" reduce using rule 399 (literal) "--" [reduce using rule 589 (primary-expression)] "auto" reduce using rule 399 (literal) "auto" [reduce using rule 589 (primary-expression)] "char" reduce using rule 399 (literal) "char" [reduce using rule 589 (primary-expression)] "char8_t" reduce using rule 399 (literal) "char8_t" [reduce using rule 589 (primary-expression)] "char16_t" reduce using rule 399 (literal) "char16_t" [reduce using rule 589 (primary-expression)] "char32_t" reduce using rule 399 (literal) "char32_t" [reduce using rule 589 (primary-expression)] "wchar_t" reduce using rule 399 (literal) "wchar_t" [reduce using rule 589 (primary-expression)] "bool" reduce using rule 399 (literal) "bool" [reduce using rule 589 (primary-expression)] "short" reduce using rule 399 (literal) "short" [reduce using rule 589 (primary-expression)] "int" reduce using rule 399 (literal) "int" [reduce using rule 589 (primary-expression)] "long" reduce using rule 399 (literal) "long" [reduce using rule 589 (primary-expression)] "signed" reduce using rule 399 (literal) "signed" [reduce using rule 589 (primary-expression)] "unsigned" reduce using rule 399 (literal) "unsigned" [reduce using rule 589 (primary-expression)] "float" reduce using rule 399 (literal) "float" [reduce using rule 589 (primary-expression)] "double" reduce using rule 399 (literal) "double" [reduce using rule 589 (primary-expression)] "void" reduce using rule 399 (literal) "void" [reduce using rule 589 (primary-expression)] "static_assert" reduce using rule 399 (literal) "static_assert" [reduce using rule 589 (primary-expression)] "static" reduce using rule 399 (literal) "static" [reduce using rule 589 (primary-expression)] "thread_local" reduce using rule 399 (literal) "thread_local" [reduce using rule 589 (primary-expression)] "mutable" reduce using rule 399 (literal) "mutable" [reduce using rule 589 (primary-expression)] $default reduce using rule 399 (literal) ud-suffix go to state 599
773 unqualified-id → template-id • $default reduce using rule 773 (unqualified-id)
52 assignment-expression → throw-expression • $default reduce using rule 52 (assignment-expression)
121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 575 postfix-expression → typename-specifier • "(" expression-list-opt ")" 577 | typename-specifier • braced-init-list "(" shift, and go to state 600 "{" shift, and go to state 398 braced-init-list go to state 601
130 cast-expression → unary-expression • $default reduce using rule 130 (cast-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 749 | unary-operator • cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 602 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
343 id-expression → unqualified-id • $default reduce using rule 343 (id-expression)
780 user-defined-literal → user-defined-character-literal • $default reduce using rule 780 (user-defined-literal)
778 user-defined-literal → user-defined-floating-point-literal • $default reduce using rule 778 (user-defined-literal)
777 user-defined-literal → user-defined-integer-literal • $default reduce using rule 777 (user-defined-literal)
402 literal → user-defined-literal • $default reduce using rule 402 (literal)
779 user-defined-literal → user-defined-string-literal • $default reduce using rule 779 (user-defined-literal)
51 assignment-expression → yield-expression • $default reduce using rule 51 (assignment-expression)
230 elaborated-enum-specifier → "enum" nested-name-specifier-opt IDENTIFIER • $default reduce using rule 230 (elaborated-enum-specifier)
160 constant-expression → conditional-expression • $default reduce using rule 160 (constant-expression)
268 explicit-specifier → "explicit" "(" constant-expression • ")" ")" shift, and go to state 603
158 conditional-expression → logical-or-expression • [",", "...", "=", ";", ")", "]", ":", "{", "}", ">"] 159 | logical-or-expression • "?" expression ":" assignment-expression 408 logical-or-expression → logical-or-expression • "||" logical-and-expression "?" shift, and go to state 574 "||" shift, and go to state 575 $default reduce using rule 158 (conditional-expression)
335 global-module-fragment → "module" ";" declaration-seq-opt • $default reduce using rule 335 (global-module-fragment)
443 module-name-qualifier → IDENTIFIER "." • $default reduce using rule 443 (module-name-qualifier)
447 module-partition → ":" module-name-qualifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 604
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 441 module-import-declaration → "import" header-name attribute-specifier-seq-opt • ";" ";" shift, and go to state 605 "alignas" shift, and go to state 158 "[" shift, and go to state 162 alignment-specifier go to state 166 attribute-specifier go to state 167
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 439 module-import-declaration → "import" module-name attribute-specifier-seq-opt • ";" ";" shift, and go to state 606 "alignas" shift, and go to state 158 "[" shift, and go to state 162 alignment-specifier go to state 166 attribute-specifier go to state 167
444 module-name-qualifier → module-name-qualifier IDENTIFIER • "." "." shift, and go to state 607
442 module-name → module-name-qualifier-opt IDENTIFIER • $default reduce using rule 442 (module-name)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 440 module-import-declaration → "import" module-partition attribute-specifier-seq-opt • ";" ";" shift, and go to state 608 "alignas" shift, and go to state 158 "[" shift, and go to state 162 alignment-specifier go to state 166 attribute-specifier go to state 167
139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → "namespace" IDENTIFIER "=" • qualified-namespace-specifier ";" 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 613 qualified-namespace-specifier → • nested-name-specifier-opt namespace-name 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 609 qualified-namespace-specifier go to state 610 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
13 INLINE-opt → • %empty [IDENTIFIER] 14 | • "inline" 237 enclosing-namespace-specifier → enclosing-namespace-specifier "::" • INLINE-opt IDENTIFIER 471 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" • INLINE-opt IDENTIFIER "{" namespace-body "}" "inline" shift, and go to state 611 $default reduce using rule 13 (INLINE-opt) INLINE-opt go to state 612
688 static_assert-declaration → "static_assert" "(" constant-expression • ")" ";" 689 | "static_assert" "(" constant-expression • "," string-literal ")" ";" "," shift, and go to state 613 ")" shift, and go to state 614
266 explicit-instantiation → EXTERN-opt "template" declaration • $default reduce using rule 266 (explicit-instantiation)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 454 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt • IDENTIFIER "{" namespace-body "}" 766 unnamed-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt • "{" namespace-body "}" IDENTIFIER shift, and go to state 615 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "{" shift, and go to state 616 alignment-specifier go to state 166 attribute-specifier go to state 167
354 init-declarator-list → init-declarator-list • "," init-declarator 653 simple-declaration → attribute-specifier-seq decl-specifier-seq init-declarator-list • ";" "," shift, and go to state 405 ";" shift, and go to state 617
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 241 enum-head → enum-key attribute-specifier-seq-opt • enum-head-name-opt enum-base-opt 242 enum-head-name → • nested-name-specifier-opt IDENTIFIER 243 enum-head-name-opt → • %empty [":", "{"] 244 | • enum-head-name 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] $default reduce using rule 243 (enum-head-name-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 class-name go to state 55 decltype-specifier go to state 121 enum-head-name go to state 618 enum-head-name-opt go to state 413 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 414 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 786 using-directive → attribute-specifier-seq-opt "using" "namespace" • nested-name-specifier-opt namespace-name ";" IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 619 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 45 alignment-specifier → "alignas" "(" • type-id ELLIPSIS-opt ")" 46 | "alignas" "(" • constant-expression ELLIPSIS-opt ")" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 171 conversion-function-id → • "operator" conversion-type-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-key go to state 424 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 620 conversion-function-id go to state 282 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 427 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 621 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
502 noptr-declarator → noptr-declarator • parameters-and-qualifiers 503 | noptr-declarator • "[" constant-expression-opt "]" attribute-specifier-seq-opt 564 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt 603 ptr-declarator → noptr-declarator • [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] "(" shift, and go to state 365 "[" shift, and go to state 366 "(" [reduce using rule 603 (ptr-declarator)] $default reduce using rule 603 (ptr-declarator) parameters-and-qualifiers go to state 622
504 noptr-declarator → "(" ptr-declarator • ")" ")" shift, and go to state 623
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 606 ptr-operator → "&" attribute-specifier-seq-opt • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "alignas" [reduce using rule 606 (ptr-operator)] "[" [reduce using rule 606 (ptr-operator)] $default reduce using rule 606 (ptr-operator) alignment-specifier go to state 166 attribute-specifier go to state 167
49 asm-declaration → attribute-specifier-seq-opt "asm" "(" • string-literal ")" ";" 694 string-literal → • STRING_LITERAL STRING_LITERAL shift, and go to state 118 string-literal go to state 624
80 attribute-specifier → "[" "[" • attribute-using-prefix-opt attribute-list "]" "]" 87 attribute-using-prefix → • "using" attribute-namespace ":" 88 attribute-using-prefix-opt → • %empty [",", IDENTIFIER, "]"] 89 | • attribute-using-prefix "using" shift, and go to state 625 $default reduce using rule 88 (attribute-using-prefix-opt) attribute-using-prefix go to state 626 attribute-using-prefix-opt go to state 627
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 607 ptr-operator → "&&" attribute-specifier-seq-opt • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "alignas" [reduce using rule 607 (ptr-operator)] "[" [reduce using rule 607 (ptr-operator)] $default reduce using rule 607 (ptr-operator) alignment-specifier go to state 166 attribute-specifier go to state 167
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 177 cv-qualifier → • "const" 178 | • "volatile" 179 cv-qualifier-seq → • cv-qualifier cv-qualifier-seq-opt 180 cv-qualifier-seq-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 181 | • cv-qualifier-seq 605 ptr-operator → "*" attribute-specifier-seq-opt • cv-qualifier-seq-opt "alignas" shift, and go to state 158 "[" shift, and go to state 162 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "alignas" [reduce using rule 180 (cv-qualifier-seq-opt)] "[" [reduce using rule 180 (cv-qualifier-seq-opt)] "const" [reduce using rule 180 (cv-qualifier-seq-opt)] "volatile" [reduce using rule 180 (cv-qualifier-seq-opt)] $default reduce using rule 180 (cv-qualifier-seq-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 cv-qualifier go to state 628 cv-qualifier-seq go to state 629 cv-qualifier-seq-opt go to state 630
139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 771 unqualified-id → "~" • type-name 772 | "~" • decltype-specifier IDENTIFIER shift, and go to state 525 "decltype" shift, and go to state 21 class-name go to state 55 decltype-specifier go to state 526 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 102 type-name go to state 527 typedef-name go to state 108
215 declarator-id → ELLIPSIS-opt id-expression • $default reduce using rule 215 (declarator-id)
21 TEMPLATE-opt → • %empty [IDENTIFIER, "operator", "~"] 22 | • "template" 467 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 468 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 612 qualified-id → nested-name-specifier • TEMPLATE-opt unqualified-id IDENTIFIER shift, and go to state 198 "template" shift, and go to state 230 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] $default reduce using rule 21 (TEMPLATE-opt) TEMPLATE-opt go to state 580
614 ref-qualifier → "&" • $default reduce using rule 614 (ref-qualifier)
615 ref-qualifier → "&&" • $default reduce using rule 615 (ref-qualifier)
617 ref-qualifier-opt → ref-qualifier • $default reduce using rule 617 (ref-qualifier-opt)
654 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt • "[" identifier-list "]" initializer ";" "[" shift, and go to state 631
330 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator • virt-specifier-seq-opt function-body 331 | attribute-specifier-seq-opt decl-specifier-seq-opt declarator • requires-clause function-body 633 requires-clause → • "requires" constraint-logical-or-expression 788 virt-specifier → • "override" 789 | • "final" 790 virt-specifier-seq → • virt-specifier 791 | • virt-specifier-seq virt-specifier 792 virt-specifier-seq-opt → • %empty ["=", ":", "{", "try"] 793 | • virt-specifier-seq "final" shift, and go to state 632 "requires" shift, and go to state 399 "override" shift, and go to state 633 $default reduce using rule 792 (virt-specifier-seq-opt) requires-clause go to state 634 virt-specifier go to state 635 virt-specifier-seq go to state 636 virt-specifier-seq-opt go to state 637
487 nodeclspec-function-declaration → attribute-specifier-seq-opt declarator ";" • $default reduce using rule 487 (nodeclspec-function-declaration)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 501 noptr-declarator → declarator-id attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 501 (noptr-declarator)] $default reduce using rule 501 (noptr-declarator) alignment-specifier go to state 166 attribute-specifier go to state 167
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 608 ptr-operator → nested-name-specifier "*" • attribute-specifier-seq-opt cv-qualifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 638
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 554 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 555 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 556 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 557 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 558 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 559 | • parameter-declaration-list "," "..." 560 parameter-declaration-list → • parameter-declaration 561 | • parameter-declaration-list "," parameter-declaration 562 parameter-declaration-list-opt → • %empty ["...", ")"] 563 | • parameter-declaration-list 564 parameters-and-qualifiers → "(" • parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "..." reduce using rule 562 (parameter-declaration-list-opt) ")" reduce using rule 562 (parameter-declaration-list-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 parameter-declaration go to state 639 parameter-declaration-clause go to state 640 parameter-declaration-list go to state 641 parameter-declaration-list-opt go to state 642
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 161 constant-expression-opt → • %empty ["]"] 162 | • constant-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 503 noptr-declarator → noptr-declarator "[" • constant-expression-opt "]" attribute-specifier-seq-opt 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "]" reduce using rule 161 (constant-expression-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 643 constant-expression-opt go to state 644 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
214 declarator → noptr-declarator parameters-and-qualifiers • trailing-return-type 502 noptr-declarator → noptr-declarator parameters-and-qualifiers • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] 714 trailing-return-type → • "->" type-id "->" shift, and go to state 645 $default reduce using rule 502 (noptr-declarator) trailing-return-type go to state 646
604 ptr-declarator → ptr-operator ptr-declarator • $default reduce using rule 604 (ptr-declarator)
36 access-specifier → "private" • $default reduce using rule 36 (access-specifier)
37 access-specifier → "protected" • $default reduce using rule 37 (access-specifier)
38 access-specifier → "public" • $default reduce using rule 38 (access-specifier)
245 enum-key → "enum" • [IDENTIFIER, "::", "alignas", "[", "decltype"] 246 | "enum" • "class" 247 | "enum" • "struct" "class" shift, and go to state 131 "struct" shift, and go to state 132 $default reduce using rule 245 (enum-key)
435 member-specification → access-specifier • ":" member-specification-opt ":" shift, and go to state 647
423 member-declaration → alias-declaration • $default reduce using rule 423 (member-declaration)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 193 decl-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", ";", "alignas", "(", "&", "[", ":", "&&", "operator", "decltype", "*", "~"] 194 | • decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 330 function-definition → attribute-specifier-seq-opt • decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | attribute-specifier-seq-opt • decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 415 member-declaration → attribute-specifier-seq-opt • decl-specifier-seq-opt member-declarator-list-opt ";" 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 193 (decl-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "::" [reduce using rule 193 (decl-specifier-seq-opt)] "alignas" [reduce using rule 193 (decl-specifier-seq-opt)] "[" [reduce using rule 193 (decl-specifier-seq-opt)] "decltype" [reduce using rule 193 (decl-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 193 (decl-specifier-seq-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 557 decl-specifier-seq-opt go to state 648 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
422 member-declaration → deduction-guide • $default reduce using rule 422 (member-declaration)
425 member-declaration → empty-declaration • $default reduce using rule 425 (member-declaration)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 507 opaque-enum-declaration → enum-key • attribute-specifier-seq-opt enum-head-name enum-base-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 649
421 member-declaration → explicit-specialization • $default reduce using rule 421 (member-declaration)
271 explicit-specifier-opt → explicit-specifier • $default reduce using rule 271 (explicit-specifier-opt)
416 member-declaration → function-definition • $default reduce using rule 416 (member-declaration)
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", ":", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 235 empty-declaration → • ";" 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 415 member-declaration → • attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" 416 | • function-definition 417 | • using-declaration 418 | • using-enum-declaration 419 | • static_assert-declaration 420 | • template-declaration 421 | • explicit-specialization 422 | • deduction-guide 423 | • alias-declaration 424 | • opaque-enum-declaration 425 | • empty-declaration 434 member-specification → • member-declaration member-specification-opt 434 | member-declaration • member-specification-opt 435 | • access-specifier ":" member-specification-opt 436 member-specification-opt → • %empty ["}"] 437 | • member-specification 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 782 using-declaration → • "using" using-declarator-list ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "template" shift, and go to state 7 "private" shift, and go to state 369 "protected" shift, and go to state 370 "public" shift, and go to state 371 "using" shift, and go to state 10 ";" shift, and go to state 11 "enum" shift, and go to state 372 "explicit" shift, and go to state 23 "static_assert" shift, and go to state 41 IDENTIFIER reduce using rule 83 (attribute-specifier-seq-opt) IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] ";" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 436 (member-specification-opt) "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) access-specifier go to state 373 alias-declaration go to state 374 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 375 deduction-guide go to state 376 empty-declaration go to state 377 enum-key go to state 378 explicit-specialization go to state 379 explicit-specifier go to state 380 explicit-specifier-opt go to state 76 function-definition go to state 381 member-declaration go to state 382 member-specification go to state 383 member-specification-opt go to state 650 opaque-enum-declaration go to state 385 static_assert-declaration go to state 386 template-declaration go to state 387 template-head go to state 101 using-declaration go to state 388 using-enum-declaration go to state 389
437 member-specification-opt → member-specification • $default reduce using rule 437 (member-specification-opt)
144 class-specifier → class-head "{" member-specification-opt • "}" "}" shift, and go to state 651
424 member-declaration → opaque-enum-declaration • $default reduce using rule 424 (member-declaration)
419 member-declaration → static_assert-declaration • $default reduce using rule 419 (member-declaration)
420 member-declaration → template-declaration • $default reduce using rule 420 (member-declaration)
417 member-declaration → using-declaration • $default reduce using rule 417 (member-declaration)
418 member-declaration → using-enum-declaration • $default reduce using rule 418 (member-declaration)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 99 base-clause → ":" • base-specifier-list 102 base-specifier → • attribute-specifier-seq-opt class-or-decltype 103 | • attribute-specifier-seq-opt "virtual" access-specifier-opt class-or-decltype 104 | • attribute-specifier-seq-opt access-specifier VIRTUAL-opt class-or-decltype 105 base-specifier-list → • base-specifier ELLIPSIS-opt 106 | • base-specifier-list "," base-specifier ELLIPSIS-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 652 base-specifier go to state 653 base-specifier-list go to state 654
101 base-clause-opt → base-clause • $default reduce using rule 101 (base-clause-opt)
134 class-head → class-key attribute-specifier-seq-opt base-clause-opt • $default reduce using rule 134 (class-head)
133 class-head → class-key attribute-specifier-seq-opt class-head-name • class-virt-specifier-opt base-clause-opt 145 class-virt-specifier → • "final" 146 class-virt-specifier-opt → • %empty [":", "{"] 147 | • class-virt-specifier "final" shift, and go to state 655 $default reduce using rule 146 (class-virt-specifier-opt) class-virt-specifier go to state 656 class-virt-specifier-opt go to state 657
135 class-head-name → nested-name-specifier-opt • class-name 139 class-name → • IDENTIFIER 140 | • simple-template-id 231 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt • IDENTIFIER 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 658 class-name go to state 659 simple-template-id go to state 660 template-name go to state 102
233 elaborated-type-specifier → class-key nested-name-specifier TEMPLATE-opt • simple-template-id 468 nested-name-specifier → nested-name-specifier TEMPLATE-opt • simple-template-id "::" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 192 simple-template-id go to state 661 template-name go to state 102
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 117 brace-or-equal-initializer → "=" • initializer-clause 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 364 initializer-clause → • assignment-expression 365 | • braced-init-list 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 664 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 281 expression-list → • initializer-list 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 363 initializer → "(" • expression-list ")" 364 initializer-clause → • assignment-expression 365 | • braced-init-list 366 initializer-list → • initializer-clause ELLIPSIS-opt 367 | • initializer-list "," initializer-clause ELLIPSIS-opt 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression-list go to state 665 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 666 initializer-list go to state 667 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 121 | "{" • initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 122 | "{" • designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 123 | "{" • "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 226 designated-initializer-clause → • designator brace-or-equal-initializer 227 designated-initializer-list → • designated-initializer-clause 228 | • designated-initializer-list "," designated-initializer-clause 229 designator → • "." IDENTIFIER 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 364 initializer-clause → • assignment-expression 365 | • braced-init-list 366 initializer-list → • initializer-clause ELLIPSIS-opt 367 | • initializer-list "," initializer-clause ELLIPSIS-opt 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 "}" shift, and go to state 668 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 "." shift, and go to state 669 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 designated-initializer-clause go to state 670 designated-initializer-list go to state 671 designator go to state 672 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 666 initializer-list go to state 673 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
116 boolean-literal → • BOOLEAN_LITERAL 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 164 constraint-logical-and-expression → • primary-expression 165 | • constraint-logical-and-expression "&&" primary-expression 166 constraint-logical-or-expression → • constraint-logical-and-expression 167 | • constraint-logical-or-expression "||" constraint-logical-and-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 570 pointer-literal → • POINTER_LITERAL 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 633 requires-clause → "requires" • constraint-logical-or-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "::" shift, and go to state 6 "this" shift, and go to state 242 "(" shift, and go to state 674 "[" shift, and go to state 247 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 354 POINTER_LITERAL shift, and go to state 259 STRING_LITERAL shift, and go to state 118 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 boolean-literal go to state 277 character-literal go to state 279 class-name go to state 55 constraint-logical-and-expression go to state 675 constraint-logical-or-expression go to state 676 conversion-function-id go to state 282 decltype-specifier go to state 121 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 356 operator-function-id go to state 302 pointer-literal go to state 304 primary-expression go to state 677 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
362 initializer → brace-or-equal-initializer • $default reduce using rule 362 (initializer)
118 brace-or-equal-initializer → braced-init-list • $default reduce using rule 118 (brace-or-equal-initializer)
369 initializer-opt → initializer • $default reduce using rule 369 (initializer-opt)
351 init-declarator → declarator initializer-opt • $default reduce using rule 351 (init-declarator)
352 init-declarator → declarator requires-clause • $default reduce using rule 352 (init-declarator)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 139 class-name → • IDENTIFIER 140 | • simple-template-id 213 declarator → • ptr-declarator 214 | • noptr-declarator parameters-and-qualifiers trailing-return-type 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 351 init-declarator → • declarator initializer-opt 352 | • declarator requires-clause 354 init-declarator-list → init-declarator-list "," • init-declarator 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator go to state 183 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 init-declarator go to state 678 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
652 simple-declaration → decl-specifier-seq init-declarator-list-opt ";" • $default reduce using rule 652 (simple-declaration)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 251 enumerator → IDENTIFIER • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 679
252 enumerator-definition → enumerator • [",", "}"] 253 | enumerator • "=" constant-expression "=" shift, and go to state 680 $default reduce using rule 252 (enumerator-definition)
254 enumerator-list → enumerator-definition • $default reduce using rule 254 (enumerator-list)
250 enum-specifier → enum-head "{" enumerator-list • "," "}" 255 enumerator-list → enumerator-list • "," enumerator-definition 257 enumerator-list-opt → enumerator-list • ["}"] "," shift, and go to state 681 $default reduce using rule 257 (enumerator-list-opt)
249 enum-specifier → enum-head "{" enumerator-list-opt • "}" "}" shift, and go to state 682
238 enum-base → • ":" type-specifier-seq 239 enum-base-opt → • %empty [";"] 240 | • enum-base 244 enum-head-name-opt → enum-head-name • [":", "{"] 507 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name • enum-base-opt ";" ":" shift, and go to state 683 ":" [reduce using rule 244 (enum-head-name-opt)] "{" reduce using rule 244 (enum-head-name-opt) $default reduce using rule 239 (enum-base-opt) enum-base go to state 684 enum-base-opt go to state 685
238 enum-base → • ":" type-specifier-seq 239 enum-base-opt → • %empty ["{"] 240 | • enum-base 241 enum-head → enum-key attribute-specifier-seq-opt enum-head-name-opt • enum-base-opt ":" shift, and go to state 683 $default reduce using rule 239 (enum-base-opt) enum-base go to state 684 enum-base-opt go to state 686
242 enum-head-name → nested-name-specifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 687
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 217 deduction-guide → explicit-specifier-opt template-name "(" • parameter-declaration-clause ")" "->" simple-template-id ";" 554 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 555 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 556 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 557 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 558 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 559 | • parameter-declaration-list "," "..." 560 parameter-declaration-list → • parameter-declaration 561 | • parameter-declaration-list "," parameter-declaration 562 parameter-declaration-list-opt → • %empty ["...", ")"] 563 | • parameter-declaration-list "..." reduce using rule 562 (parameter-declaration-list-opt) ")" reduce using rule 562 (parameter-declaration-list-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 parameter-declaration go to state 639 parameter-declaration-clause go to state 688 parameter-declaration-list go to state 641 parameter-declaration-list-opt go to state 642
438 module-declaration → EXPORT-opt "module" • module-name module-partition-opt attribute-specifier-seq-opt ";" 442 module-name → • module-name-qualifier-opt IDENTIFIER 443 module-name-qualifier → • IDENTIFIER "." 444 | • module-name-qualifier IDENTIFIER "." 445 module-name-qualifier-opt → • %empty [IDENTIFIER] 446 | • module-name-qualifier IDENTIFIER shift, and go to state 137 IDENTIFIER [reduce using rule 445 (module-name-qualifier-opt)] module-name go to state 689 module-name-qualifier go to state 142 module-name-qualifier-opt go to state 143
596 private-module-fragment → • "module" ":" "private" ";" declaration-seq-opt 597 private-module-fragment-opt → • %empty [$end] 598 | • private-module-fragment 718 translation-unit → global-module-fragment-opt module-declaration declaration-seq-opt • private-module-fragment-opt "module" shift, and go to state 690 $default reduce using rule 597 (private-module-fragment-opt) private-module-fragment go to state 691 private-module-fragment-opt go to state 692
467 nested-name-specifier → nested-name-specifier IDENTIFIER "::" • $default reduce using rule 467 (nested-name-specifier)
658 simple-type-specifier → nested-name-specifier "template" simple-template-id • $default reduce using rule 658 (simple-type-specifier)
468 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id • "::" "::" shift, and go to state 693
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 171 conversion-function-id → • "operator" conversion-type-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 695 template-argument → • constant-expression 696 | • type-id 697 | • id-expression 698 template-argument-list → • template-argument ELLIPSIS-opt 699 | • template-argument-list "," template-argument ELLIPSIS-opt 700 template-argument-list-opt → • %empty [">"] 701 | • template-argument-list 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 721 | nested-name-specifier-opt concept-name "<" • template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] ">" reduce using rule 700 (template-argument-list-opt) "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-key go to state 424 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 425 conversion-function-id go to state 282 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 426 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 427 string-literal go to state 313 template-argument go to state 428 template-argument-list go to state 429 template-argument-list-opt go to state 694 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 431 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
153 concept-name → IDENTIFIER • $default reduce using rule 153 (concept-name)
152 concept-definition → "concept" concept-name • "=" constraint-expression ";" "=" shift, and go to state 695
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [IDENTIFIER, "::", "alignas", "[", "decltype"] 84 | • attribute-specifier-seq 139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 231 elaborated-type-specifier → class-key • attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | class-key • simple-template-id 233 | class-key • nested-name-specifier TEMPLATE-opt simple-template-id 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 696 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 179 simple-template-id go to state 180 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
695 template-argument → constant-expression • $default reduce using rule 695 (template-argument)
592 primary-expression → id-expression • [",", "...", "+", "-", "(", "&", "[", "<=>", "?", "&&", "||", "->", ".", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "++", "--"] 697 template-argument → id-expression • [",", "...", ">"] "," reduce using rule 592 (primary-expression) "," [reduce using rule 697 (template-argument)] "..." reduce using rule 592 (primary-expression) "..." [reduce using rule 697 (template-argument)] ">" reduce using rule 592 (primary-expression) ">" [reduce using rule 697 (template-argument)] $default reduce using rule 592 (primary-expression)
121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 574 postfix-expression → simple-type-specifier • "(" expression-list-opt ")" 576 | simple-type-specifier • braced-init-list 737 type-specifier → simple-type-specifier • [",", "constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", ")", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", ">", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] "(" shift, and go to state 596 "{" shift, and go to state 398 "(" [reduce using rule 737 (type-specifier)] $default reduce using rule 737 (type-specifier) braced-init-list go to state 597
5 ELLIPSIS-opt → • %empty [",", ">"] 6 | • "..." 698 template-argument-list → template-argument • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 697
699 template-argument-list → template-argument-list • "," template-argument ELLIPSIS-opt 701 template-argument-list-opt → template-argument-list • [">"] "," shift, and go to state 698 $default reduce using rule 701 (template-argument-list-opt)
656 simple-template-id → template-name "<" template-argument-list-opt • ">" ">" shift, and go to state 699
696 template-argument → type-id • $default reduce using rule 696 (template-argument)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 84 | • attribute-specifier-seq 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 741 | type-specifier • attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 742 | type-specifier • type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 700 class-key go to state 424 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 701 typedef-name go to state 108 typename-specifier go to state 109
29 abstract-declarator → • ptr-abstract-declarator 30 | • noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | • abstract-pack-declarator 32 abstract-declarator-opt → • %empty [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] 33 | • abstract-declarator 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 493 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 494 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 495 | • "(" ptr-abstract-declarator ")" 496 noptr-abstract-declarator-opt → • %empty ["(", "["] 497 | • noptr-abstract-declarator 498 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 499 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 500 | • "..." 599 ptr-abstract-declarator → • noptr-abstract-declarator 600 | • ptr-operator ptr-abstract-declarator-opt 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 724 type-id → type-specifier-seq • abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 702 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 703 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "..." [reduce using rule 32 (abstract-declarator-opt)] "(" [reduce using rule 32 (abstract-declarator-opt)] "(" [reduce using rule 496 (noptr-abstract-declarator-opt)] "[" reduce using rule 496 (noptr-abstract-declarator-opt) $default reduce using rule 32 (abstract-declarator-opt) abstract-declarator go to state 704 abstract-declarator-opt go to state 705 abstract-pack-declarator go to state 706 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 707 noptr-abstract-declarator-opt go to state 708 noptr-abstract-pack-declarator go to state 709 ptr-abstract-declarator go to state 710 ptr-operator go to state 711 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 575 postfix-expression → typename-specifier • "(" expression-list-opt ")" 577 | typename-specifier • braced-init-list 739 type-specifier → typename-specifier • [",", "constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", ")", "&", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", ">", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] "(" shift, and go to state 600 "{" shift, and go to state 398 "(" [reduce using rule 739 (type-specifier)] $default reduce using rule 739 (type-specifier) braced-init-list go to state 601
566 placeholder-type-specifier → type-constraint-opt "decltype" "(" • "auto" ")" "auto" shift, and go to state 712
273 export-declaration → "export" "{" declaration-seq-opt "}" • $default reduce using rule 273 (export-declaration)
394 linkage-specification → "extern" string-literal "{" declaration-seq-opt • "}" "}" shift, and go to state 713
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 554 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 555 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 556 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 557 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 704 | "template" "<" • template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 709 template-parameter → • type-parameter 710 | • parameter-declaration 711 template-parameter-list → • template-parameter 712 | • template-parameter-list "," template-parameter 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 728 type-parameter → • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 729 | • type-parameter-key IDENTIFIER-opt "=" type-id 730 | • type-constraint ELLIPSIS-opt IDENTIFIER-opt 731 | • type-constraint IDENTIFIER-opt "=" type-id 732 | • template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 733 | • template-head type-parameter-key IDENTIFIER-opt "=" id-expression 734 type-parameter-key → • "class" 735 | • "typename" 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "template" shift, and go to state 216 "typename" shift, and go to state 217 "class" shift, and go to state 218 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 221 parameter-declaration go to state 222 simple-template-id go to state 96 template-head go to state 223 template-name go to state 102 template-parameter go to state 224 template-parameter-list go to state 225 type-constraint go to state 226 type-name go to state 106 type-parameter go to state 227 type-parameter-key go to state 228 typedef-name go to state 108
267 explicit-specialization → "template" "<" ">" declaration • $default reduce using rule 267 (explicit-specialization)
24 THIS-opt → "this" • $default reduce using rule 24 (THIS-opt)
133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 554 parameter-declaration → attribute-specifier-seq-opt THIS-opt • decl-specifier-seq declarator 555 | attribute-specifier-seq-opt THIS-opt • decl-specifier-seq declarator "=" initializer-clause 556 | attribute-specifier-seq-opt THIS-opt • decl-specifier-seq abstract-declarator-opt 557 | attribute-specifier-seq-opt THIS-opt • decl-specifier-seq abstract-declarator-opt "=" initializer-clause 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 714 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
5 ELLIPSIS-opt → • %empty [",", IDENTIFIER, ">"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["="] 12 | • IDENTIFIER 732 type-parameter → template-head type-parameter-key • ELLIPSIS-opt IDENTIFIER-opt 733 | template-head type-parameter-key • IDENTIFIER-opt "=" id-expression "..." shift, and go to state 156 IDENTIFIER shift, and go to state 445 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "=" reduce using rule 11 (IDENTIFIER-opt) $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 715 IDENTIFIER-opt go to state 716
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 554 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 555 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 556 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 557 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 709 template-parameter → • type-parameter 710 | • parameter-declaration 712 template-parameter-list → template-parameter-list "," • template-parameter 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 728 type-parameter → • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 729 | • type-parameter-key IDENTIFIER-opt "=" type-id 730 | • type-constraint ELLIPSIS-opt IDENTIFIER-opt 731 | • type-constraint IDENTIFIER-opt "=" type-id 732 | • template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 733 | • template-head type-parameter-key IDENTIFIER-opt "=" id-expression 734 type-parameter-key → • "class" 735 | • "typename" 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "template" shift, and go to state 216 "typename" shift, and go to state 217 "class" shift, and go to state 218 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 221 parameter-declaration go to state 222 simple-template-id go to state 96 template-head go to state 223 template-name go to state 102 template-parameter go to state 717 type-constraint go to state 226 type-name go to state 106 type-parameter go to state 227 type-parameter-key go to state 228 typedef-name go to state 108
633 requires-clause → • "requires" constraint-logical-or-expression 634 requires-clause-opt → • %empty ["constexpr", "...", "export", "extern", IDENTIFIER, "inline", "::", "template", "typename", "virtual", "using", ";", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "concept", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] 635 | • requires-clause 704 template-head → "template" "<" template-parameter-list ">" • requires-clause-opt "requires" shift, and go to state 399 $default reduce using rule 634 (requires-clause-opt) requires-clause go to state 718 requires-clause-opt go to state 719
12 IDENTIFIER-opt → IDENTIFIER • $default reduce using rule 12 (IDENTIFIER-opt)
11 IDENTIFIER-opt → • %empty [",", ">"] 12 | • IDENTIFIER 730 type-parameter → type-constraint ELLIPSIS-opt • IDENTIFIER-opt IDENTIFIER shift, and go to state 445 $default reduce using rule 11 (IDENTIFIER-opt) IDENTIFIER-opt go to state 720
731 type-parameter → type-constraint IDENTIFIER-opt • "=" type-id "=" shift, and go to state 721
11 IDENTIFIER-opt → • %empty [",", ">"] 12 | • IDENTIFIER 728 type-parameter → type-parameter-key ELLIPSIS-opt • IDENTIFIER-opt IDENTIFIER shift, and go to state 445 $default reduce using rule 11 (IDENTIFIER-opt) IDENTIFIER-opt go to state 722
729 type-parameter → type-parameter-key IDENTIFIER-opt • "=" type-id "=" shift, and go to state 723
468 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id • "::" 746 typename-specifier → "typename" nested-name-specifier TEMPLATE-opt simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" shift, and go to state 693 "::" [reduce using rule 746 (typename-specifier)] $default reduce using rule 746 (typename-specifier)
44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt "=" • defining-type-id ";" 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 218 defining-type-id → • defining-type-specifier-seq abstract-declarator-opt 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 222 defining-type-specifier-seq → • defining-type-specifier attribute-specifier-seq-opt 223 | • defining-type-specifier defining-type-specifier-seq 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decltype-specifier go to state 63 defining-type-id go to state 724 defining-type-specifier go to state 725 defining-type-specifier-seq go to state 726 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
467 nested-name-specifier → nested-name-specifier IDENTIFIER • "::" 708 template-name → IDENTIFIER • ["<"] 767 unqualified-id → IDENTIFIER • [",", "...", ";"] "::" shift, and go to state 418 "<" reduce using rule 708 (template-name) $default reduce using rule 767 (unqualified-id)
705 template-id → simple-template-id • $default reduce using rule 705 (template-id)
783 using-declarator → TYPENAME-opt nested-name-specifier unqualified-id • $default reduce using rule 783 (using-declarator)
5 ELLIPSIS-opt → • %empty [",", ";"] 6 | • "..." 785 using-declarator-list → using-declarator-list "," using-declarator • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 727
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 488 | "noexcept" "(" • expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 728 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
289 fold-expression → "(" "..." • fold-operator cast-expression ")" 291 fold-operator → • "+" 292 | • "-" 293 | • "*" 294 | • "/" 295 | • "%" 296 | • "^" 297 | • "&" 298 | • "|" 299 | • "<<" 300 | • ">>" 301 | • "+=" 302 | • "-=" 303 | • "*=" 304 | • "/=" 305 | • "%=" 306 | • "^=" 307 | • "&=" 308 | • "|=" 309 | • "<<=" 310 | • ">>=" 311 | • "=" 312 | • "==" 313 | • "!=" 314 | • "<" 315 | • ">" 316 | • "<=" 317 | • ">=" 318 | • "&&" 319 | • "||" 320 | • "," 321 | • ".*" 322 | • "->*" "," shift, and go to state 729 "+" shift, and go to state 730 "-" shift, and go to state 731 "=" shift, and go to state 732 "&" shift, and go to state 733 "*=" shift, and go to state 734 "/=" shift, and go to state 735 "%=" shift, and go to state 736 "+=" shift, and go to state 737 "-=" shift, and go to state 738 ">>=" shift, and go to state 739 "<<=" shift, and go to state 740 "&=" shift, and go to state 741 "^=" shift, and go to state 742 "|=" shift, and go to state 743 "&&" shift, and go to state 744 "||" shift, and go to state 745 "==" shift, and go to state 746 "!=" shift, and go to state 747 "^" shift, and go to state 748 "<" shift, and go to state 749 ">" shift, and go to state 750 "*" shift, and go to state 751 "/" shift, and go to state 752 "%" shift, and go to state 753 "|" shift, and go to state 754 "<<" shift, and go to state 755 ">>" shift, and go to state 756 "<=" shift, and go to state 757 ">=" shift, and go to state 758 ".*" shift, and go to state 759 "->*" shift, and go to state 760 fold-operator go to state 761
288 fold-expression → "(" cast-expression • fold-operator "..." ")" 290 | "(" cast-expression • fold-operator "..." fold-operator cast-expression ")" 291 fold-operator → • "+" 292 | • "-" 293 | • "*" 294 | • "/" 295 | • "%" 296 | • "^" 297 | • "&" 298 | • "|" 299 | • "<<" 300 | • ">>" 301 | • "+=" 302 | • "-=" 303 | • "*=" 304 | • "/=" 305 | • "%=" 306 | • "^=" 307 | • "&=" 308 | • "|=" 309 | • "<<=" 310 | • ">>=" 311 | • "=" 312 | • "==" 313 | • "!=" 314 | • "<" 315 | • ">" 316 | • "<=" 317 | • ">=" 318 | • "&&" 319 | • "||" 320 | • "," 321 | • ".*" 322 | • "->*" 567 pm-expression → cast-expression • [",", "+", "-", "=", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] "," shift, and go to state 729 "+" shift, and go to state 730 "-" shift, and go to state 731 "=" shift, and go to state 732 "&" shift, and go to state 733 "*=" shift, and go to state 734 "/=" shift, and go to state 735 "%=" shift, and go to state 736 "+=" shift, and go to state 737 "-=" shift, and go to state 738 ">>=" shift, and go to state 739 "<<=" shift, and go to state 740 "&=" shift, and go to state 741 "^=" shift, and go to state 742 "|=" shift, and go to state 743 "&&" shift, and go to state 744 "||" shift, and go to state 745 "==" shift, and go to state 746 "!=" shift, and go to state 747 "^" shift, and go to state 748 "<" shift, and go to state 749 ">" shift, and go to state 750 "*" shift, and go to state 751 "/" shift, and go to state 752 "%" shift, and go to state 753 "|" shift, and go to state 754 "<<" shift, and go to state 755 ">>" shift, and go to state 756 "<=" shift, and go to state 757 ">=" shift, and go to state 758 ".*" shift, and go to state 759 "->*" shift, and go to state 760 "," [reduce using rule 567 (pm-expression)] "+" [reduce using rule 567 (pm-expression)] "-" [reduce using rule 567 (pm-expression)] "=" [reduce using rule 567 (pm-expression)] "&" [reduce using rule 567 (pm-expression)] "*=" [reduce using rule 567 (pm-expression)] "/=" [reduce using rule 567 (pm-expression)] "%=" [reduce using rule 567 (pm-expression)] "+=" [reduce using rule 567 (pm-expression)] "-=" [reduce using rule 567 (pm-expression)] ">>=" [reduce using rule 567 (pm-expression)] "<<=" [reduce using rule 567 (pm-expression)] "&=" [reduce using rule 567 (pm-expression)] "^=" [reduce using rule 567 (pm-expression)] "|=" [reduce using rule 567 (pm-expression)] "&&" [reduce using rule 567 (pm-expression)] "||" [reduce using rule 567 (pm-expression)] "==" [reduce using rule 567 (pm-expression)] "!=" [reduce using rule 567 (pm-expression)] "^" [reduce using rule 567 (pm-expression)] "<" [reduce using rule 567 (pm-expression)] ">" [reduce using rule 567 (pm-expression)] "*" [reduce using rule 567 (pm-expression)] "/" [reduce using rule 567 (pm-expression)] "%" [reduce using rule 567 (pm-expression)] "|" [reduce using rule 567 (pm-expression)] "<<" [reduce using rule 567 (pm-expression)] ">>" [reduce using rule 567 (pm-expression)] "<=" [reduce using rule 567 (pm-expression)] ">=" [reduce using rule 567 (pm-expression)] ".*" [reduce using rule 567 (pm-expression)] "->*" [reduce using rule 567 (pm-expression)] $default reduce using rule 567 (pm-expression) fold-operator go to state 762
280 expression → expression • "," assignment-expression 591 primary-expression → "(" expression • ")" "," shift, and go to state 552 ")" shift, and go to state 763
131 cast-expression → "(" type-id • ")" cast-expression ")" shift, and go to state 764
5 ELLIPSIS-opt → • %empty [",", "]"] 6 | • "..." 648 simple-capture → IDENTIFIER • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 765
650 simple-capture → "this" • $default reduce using rule 650 (simple-capture)
127 capture-default → "=" • $default reduce using rule 127 (capture-default)
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 126 capture-default → "&" • [",", "]"] 350 init-capture → "&" • ELLIPSIS-opt IDENTIFIER initializer 649 simple-capture → "&" • IDENTIFIER ELLIPSIS-opt "..." shift, and go to state 156 IDENTIFIER shift, and go to state 766 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 126 (capture-default) ELLIPSIS-opt go to state 767
651 simple-capture → "*" • "this" "this" shift, and go to state 768
349 init-capture → ELLIPSIS-opt • IDENTIFIER initializer IDENTIFIER shift, and go to state 769
128 capture-list → capture • $default reduce using rule 128 (capture-list)
383 lambda-capture → capture-default • ["]"] 385 | capture-default • "," capture-list "," shift, and go to state 770 $default reduce using rule 383 (lambda-capture)
129 capture-list → capture-list • "," capture 384 lambda-capture → capture-list • ["]"] "," shift, and go to state 771 $default reduce using rule 384 (lambda-capture)
125 capture → init-capture • $default reduce using rule 125 (capture)
387 lambda-capture-opt → lambda-capture • $default reduce using rule 387 (lambda-capture-opt)
392 lambda-introducer → "[" lambda-capture-opt • "]" "]" shift, and go to state 772
124 capture → simple-capture • $default reduce using rule 124 (capture)
90 await-expression → "co_await" cast-expression • $default reduce using rule 90 (await-expression)
553 overloadable-operator → "," • $default reduce using rule 553 (overloadable-operator)
520 overloadable-operator → "!" • $default reduce using rule 520 (overloadable-operator)
521 overloadable-operator → "+" • $default reduce using rule 521 (overloadable-operator)
522 overloadable-operator → "-" • $default reduce using rule 522 (overloadable-operator)
529 overloadable-operator → "=" • $default reduce using rule 529 (overloadable-operator)
515 overloadable-operator → "(" • ")" ")" shift, and go to state 773
527 overloadable-operator → "&" • $default reduce using rule 527 (overloadable-operator)
532 overloadable-operator → "*=" • $default reduce using rule 532 (overloadable-operator)
533 overloadable-operator → "/=" • $default reduce using rule 533 (overloadable-operator)
534 overloadable-operator → "%=" • $default reduce using rule 534 (overloadable-operator)
530 overloadable-operator → "+=" • $default reduce using rule 530 (overloadable-operator)
531 overloadable-operator → "-=" • $default reduce using rule 531 (overloadable-operator)
550 overloadable-operator → ">>=" • $default reduce using rule 550 (overloadable-operator)
549 overloadable-operator → "<<=" • $default reduce using rule 549 (overloadable-operator)
536 overloadable-operator → "&=" • $default reduce using rule 536 (overloadable-operator)
535 overloadable-operator → "^=" • $default reduce using rule 535 (overloadable-operator)
537 overloadable-operator → "|=" • $default reduce using rule 537 (overloadable-operator)
516 overloadable-operator → "[" • "]" "]" shift, and go to state 774
514 overloadable-operator → "co_await" • $default reduce using rule 514 (overloadable-operator)
544 overloadable-operator → "<=>" • $default reduce using rule 544 (overloadable-operator)
545 overloadable-operator → "&&" • $default reduce using rule 545 (overloadable-operator)
546 overloadable-operator → "||" • $default reduce using rule 546 (overloadable-operator)
517 overloadable-operator → "->" • $default reduce using rule 517 (overloadable-operator)
511 overloadable-operator → "delete" • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 513 | "delete" • "[" "]" "[" shift, and go to state 775 "[" [reduce using rule 511 (overloadable-operator)] $default reduce using rule 511 (overloadable-operator)
538 overloadable-operator → "==" • $default reduce using rule 538 (overloadable-operator)
539 overloadable-operator → "!=" • $default reduce using rule 539 (overloadable-operator)
526 overloadable-operator → "^" • $default reduce using rule 526 (overloadable-operator)
540 overloadable-operator → "<" • $default reduce using rule 540 (overloadable-operator)
541 overloadable-operator → ">" • $default reduce using rule 541 (overloadable-operator)
523 overloadable-operator → "*" • $default reduce using rule 523 (overloadable-operator)
524 overloadable-operator → "/" • $default reduce using rule 524 (overloadable-operator)
525 overloadable-operator → "%" • $default reduce using rule 525 (overloadable-operator)
528 overloadable-operator → "|" • $default reduce using rule 528 (overloadable-operator)
547 overloadable-operator → "<<" • $default reduce using rule 547 (overloadable-operator)
548 overloadable-operator → ">>" • $default reduce using rule 548 (overloadable-operator)
542 overloadable-operator → "<=" • $default reduce using rule 542 (overloadable-operator)
543 overloadable-operator → ">=" • $default reduce using rule 543 (overloadable-operator)
518 overloadable-operator → "->*" • $default reduce using rule 518 (overloadable-operator)
510 overloadable-operator → "new" • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 512 | "new" • "[" "]" "[" shift, and go to state 776 "[" [reduce using rule 510 (overloadable-operator)] $default reduce using rule 510 (overloadable-operator)
519 overloadable-operator → "~" • $default reduce using rule 519 (overloadable-operator)
551 overloadable-operator → "++" • $default reduce using rule 551 (overloadable-operator)
552 overloadable-operator → "--" • $default reduce using rule 552 (overloadable-operator)
171 conversion-function-id → "operator" conversion-type-id • $default reduce using rule 171 (conversion-function-id)
508 operator-function-id → "operator" overloadable-operator • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 509 | "operator" overloadable-operator • "<" template-argument-list-opt ">" "<" shift, and go to state 777 "<" [reduce using rule 508 (operator-function-id)] $default reduce using rule 508 (operator-function-id)
403 literal-operator-id → "operator" string-literal • IDENTIFIER 747 ud-suffix → • IDENTIFIER 781 user-defined-string-literal → string-literal • ud-suffix IDENTIFIER shift, and go to state 778 ud-suffix go to state 599
139 class-name → • IDENTIFIER 140 | • simple-template-id 168 conversion-declarator → • ptr-operator conversion-declarator-opt 169 conversion-declarator-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 170 | • conversion-declarator 172 conversion-type-id → type-specifier-seq • conversion-declarator-opt 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 169 (conversion-declarator-opt)] "::" [reduce using rule 169 (conversion-declarator-opt)] "&" [reduce using rule 169 (conversion-declarator-opt)] "&&" [reduce using rule 169 (conversion-declarator-opt)] "decltype" [reduce using rule 169 (conversion-declarator-opt)] "*" [reduce using rule 169 (conversion-declarator-opt)] $default reduce using rule 169 (conversion-declarator-opt) class-name go to state 55 conversion-declarator go to state 779 conversion-declarator-opt go to state 780 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 ptr-operator go to state 781 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
404 literal-operator-id → "operator" user-defined-string-literal • $default reduce using rule 404 (literal-operator-id)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 554 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 555 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 556 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 557 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 558 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 559 | • parameter-declaration-list "," "..." 560 parameter-declaration-list → • parameter-declaration 561 | • parameter-declaration-list "," parameter-declaration 562 parameter-declaration-list-opt → • %empty ["...", ")"] 563 | • parameter-declaration-list 628 requirement-parameter-list → "(" • parameter-declaration-clause ")" "..." reduce using rule 562 (parameter-declaration-list-opt) ")" reduce using rule 562 (parameter-declaration-list-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 parameter-declaration go to state 639 parameter-declaration-clause go to state 782 parameter-declaration-list go to state 641 parameter-declaration-list-opt go to state 642
630 requirement-parameter-list-opt → requirement-parameter-list • $default reduce using rule 630 (requirement-parameter-list-opt)
627 requirement-body → • "{" requirement-seq "}" 636 requires-expression → "requires" requirement-parameter-list-opt • requirement-body "{" shift, and go to state 783 requirement-body go to state 784
139 class-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 248 enum-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 708 template-name → IDENTIFIER • ["<"] 743 typedef-name → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "," reduce using rule 139 (class-name) "," [reduce using rule 248 (enum-name)] "," [reduce using rule 743 (typedef-name)] "constexpr" reduce using rule 139 (class-name) "constexpr" [reduce using rule 248 (enum-name)] "constexpr" [reduce using rule 743 (typedef-name)] "..." reduce using rule 139 (class-name) "..." [reduce using rule 248 (enum-name)] "..." [reduce using rule 743 (typedef-name)] "export" reduce using rule 139 (class-name) "export" [reduce using rule 248 (enum-name)] "export" [reduce using rule 743 (typedef-name)] "extern" reduce using rule 139 (class-name) "extern" [reduce using rule 248 (enum-name)] "extern" [reduce using rule 743 (typedef-name)] IDENTIFIER reduce using rule 139 (class-name) IDENTIFIER [reduce using rule 248 (enum-name)] IDENTIFIER [reduce using rule 743 (typedef-name)] "inline" reduce using rule 139 (class-name) "inline" [reduce using rule 248 (enum-name)] "inline" [reduce using rule 743 (typedef-name)] "noexcept" reduce using rule 139 (class-name) "noexcept" [reduce using rule 248 (enum-name)] "noexcept" [reduce using rule 743 (typedef-name)] "::" reduce using rule 139 (class-name) "::" [reduce using rule 248 (enum-name)] "::" [reduce using rule 743 (typedef-name)] "template" reduce using rule 139 (class-name) "template" [reduce using rule 248 (enum-name)] "template" [reduce using rule 743 (typedef-name)] "typename" reduce using rule 139 (class-name) "typename" [reduce using rule 248 (enum-name)] "typename" [reduce using rule 743 (typedef-name)] "virtual" reduce using rule 139 (class-name) "virtual" [reduce using rule 248 (enum-name)] "virtual" [reduce using rule 743 (typedef-name)] "+" reduce using rule 139 (class-name) "+" [reduce using rule 248 (enum-name)] "+" [reduce using rule 743 (typedef-name)] "-" reduce using rule 139 (class-name) "-" [reduce using rule 248 (enum-name)] "-" [reduce using rule 743 (typedef-name)] "using" reduce using rule 139 (class-name) "using" [reduce using rule 248 (enum-name)] "using" [reduce using rule 743 (typedef-name)] "=" reduce using rule 139 (class-name) "=" [reduce using rule 248 (enum-name)] "=" [reduce using rule 743 (typedef-name)] ";" reduce using rule 139 (class-name) ";" [reduce using rule 248 (enum-name)] ";" [reduce using rule 743 (typedef-name)] "alignas" reduce using rule 139 (class-name) "alignas" [reduce using rule 248 (enum-name)] "alignas" [reduce using rule 743 (typedef-name)] "(" reduce using rule 139 (class-name) "(" [reduce using rule 248 (enum-name)] "(" [reduce using rule 743 (typedef-name)] ")" reduce using rule 139 (class-name) ")" [reduce using rule 248 (enum-name)] ")" [reduce using rule 743 (typedef-name)] "&" reduce using rule 139 (class-name) "&" [reduce using rule 248 (enum-name)] "&" [reduce using rule 743 (typedef-name)] "asm" reduce using rule 139 (class-name) "asm" [reduce using rule 248 (enum-name)] "asm" [reduce using rule 743 (typedef-name)] "*=" reduce using rule 139 (class-name) "*=" [reduce using rule 248 (enum-name)] "*=" [reduce using rule 743 (typedef-name)] "/=" reduce using rule 139 (class-name) "/=" [reduce using rule 248 (enum-name)] "/=" [reduce using rule 743 (typedef-name)] "%=" reduce using rule 139 (class-name) "%=" [reduce using rule 248 (enum-name)] "%=" [reduce using rule 743 (typedef-name)] "+=" reduce using rule 139 (class-name) "+=" [reduce using rule 248 (enum-name)] "+=" [reduce using rule 743 (typedef-name)] "-=" reduce using rule 139 (class-name) "-=" [reduce using rule 248 (enum-name)] "-=" [reduce using rule 743 (typedef-name)] ">>=" reduce using rule 139 (class-name) ">>=" [reduce using rule 248 (enum-name)] ">>=" [reduce using rule 743 (typedef-name)] "<<=" reduce using rule 139 (class-name) "<<=" [reduce using rule 248 (enum-name)] "<<=" [reduce using rule 743 (typedef-name)] "&=" reduce using rule 139 (class-name) "&=" [reduce using rule 248 (enum-name)] "&=" [reduce using rule 743 (typedef-name)] "^=" reduce using rule 139 (class-name) "^=" [reduce using rule 248 (enum-name)] "^=" [reduce using rule 743 (typedef-name)] "|=" reduce using rule 139 (class-name) "|=" [reduce using rule 248 (enum-name)] "|=" [reduce using rule 743 (typedef-name)] "[" reduce using rule 139 (class-name) "[" [reduce using rule 248 (enum-name)] "[" [reduce using rule 743 (typedef-name)] "]" reduce using rule 139 (class-name) "]" [reduce using rule 248 (enum-name)] "]" [reduce using rule 743 (typedef-name)] ":" reduce using rule 139 (class-name) ":" [reduce using rule 248 (enum-name)] ":" [reduce using rule 743 (typedef-name)] "{" reduce using rule 139 (class-name) "{" [reduce using rule 248 (enum-name)] "{" [reduce using rule 743 (typedef-name)] "}" reduce using rule 139 (class-name) "}" [reduce using rule 248 (enum-name)] "}" [reduce using rule 743 (typedef-name)] "class" reduce using rule 139 (class-name) "class" [reduce using rule 248 (enum-name)] "class" [reduce using rule 743 (typedef-name)] "struct" reduce using rule 139 (class-name) "struct" [reduce using rule 248 (enum-name)] "struct" [reduce using rule 743 (typedef-name)] "union" reduce using rule 139 (class-name) "union" [reduce using rule 248 (enum-name)] "union" [reduce using rule 743 (typedef-name)] "final" reduce using rule 139 (class-name) "final" [reduce using rule 248 (enum-name)] "final" [reduce using rule 743 (typedef-name)] "<=>" reduce using rule 139 (class-name) "<=>" [reduce using rule 248 (enum-name)] "<=>" [reduce using rule 743 (typedef-name)] "concept" reduce using rule 139 (class-name) "concept" [reduce using rule 248 (enum-name)] "concept" [reduce using rule 743 (typedef-name)] "?" reduce using rule 139 (class-name) "?" [reduce using rule 248 (enum-name)] "?" [reduce using rule 743 (typedef-name)] "&&" reduce using rule 139 (class-name) "&&" [reduce using rule 248 (enum-name)] "&&" [reduce using rule 743 (typedef-name)] "||" reduce using rule 139 (class-name) "||" [reduce using rule 248 (enum-name)] "||" [reduce using rule 743 (typedef-name)] "operator" reduce using rule 139 (class-name) "operator" [reduce using rule 248 (enum-name)] "operator" [reduce using rule 743 (typedef-name)] "const" reduce using rule 139 (class-name) "const" [reduce using rule 248 (enum-name)] "const" [reduce using rule 743 (typedef-name)] "volatile" reduce using rule 139 (class-name) "volatile" [reduce using rule 248 (enum-name)] "volatile" [reduce using rule 743 (typedef-name)] "friend" reduce using rule 139 (class-name) "friend" [reduce using rule 248 (enum-name)] "friend" [reduce using rule 743 (typedef-name)] "typedef" reduce using rule 139 (class-name) "typedef" [reduce using rule 248 (enum-name)] "typedef" [reduce using rule 743 (typedef-name)] "consteval" reduce using rule 139 (class-name) "consteval" [reduce using rule 248 (enum-name)] "consteval" [reduce using rule 743 (typedef-name)] "constinit" reduce using rule 139 (class-name) "constinit" [reduce using rule 248 (enum-name)] "constinit" [reduce using rule 743 (typedef-name)] "decltype" reduce using rule 139 (class-name) "decltype" [reduce using rule 248 (enum-name)] "decltype" [reduce using rule 743 (typedef-name)] "->" reduce using rule 139 (class-name) "->" [reduce using rule 248 (enum-name)] "->" [reduce using rule 743 (typedef-name)] "." reduce using rule 139 (class-name) "." [reduce using rule 248 (enum-name)] "." [reduce using rule 743 (typedef-name)] "enum" reduce using rule 139 (class-name) "enum" [reduce using rule 248 (enum-name)] "enum" [reduce using rule 743 (typedef-name)] "==" reduce using rule 139 (class-name) "==" [reduce using rule 248 (enum-name)] "==" [reduce using rule 743 (typedef-name)] "!=" reduce using rule 139 (class-name) "!=" [reduce using rule 248 (enum-name)] "!=" [reduce using rule 743 (typedef-name)] "^" reduce using rule 139 (class-name) "^" [reduce using rule 248 (enum-name)] "^" [reduce using rule 743 (typedef-name)] "<" reduce using rule 139 (class-name) "<" [reduce using rule 248 (enum-name)] "<" [reduce using rule 708 (template-name)] "<" [reduce using rule 743 (typedef-name)] ">" reduce using rule 139 (class-name) ">" [reduce using rule 248 (enum-name)] ">" [reduce using rule 743 (typedef-name)] "explicit" reduce using rule 139 (class-name) "explicit" [reduce using rule 248 (enum-name)] "explicit" [reduce using rule 743 (typedef-name)] "*" reduce using rule 139 (class-name) "*" [reduce using rule 248 (enum-name)] "*" [reduce using rule 743 (typedef-name)] "/" reduce using rule 139 (class-name) "/" [reduce using rule 248 (enum-name)] "/" [reduce using rule 743 (typedef-name)] "%" reduce using rule 139 (class-name) "%" [reduce using rule 248 (enum-name)] "%" [reduce using rule 743 (typedef-name)] "|" reduce using rule 139 (class-name) "|" [reduce using rule 248 (enum-name)] "|" [reduce using rule 743 (typedef-name)] "<<" reduce using rule 139 (class-name) "<<" [reduce using rule 248 (enum-name)] "<<" [reduce using rule 743 (typedef-name)] ">>" reduce using rule 139 (class-name) ">>" [reduce using rule 248 (enum-name)] ">>" [reduce using rule 743 (typedef-name)] "<=" reduce using rule 139 (class-name) "<=" [reduce using rule 248 (enum-name)] "<=" [reduce using rule 743 (typedef-name)] ">=" reduce using rule 139 (class-name) ">=" [reduce using rule 248 (enum-name)] ">=" [reduce using rule 743 (typedef-name)] ".*" reduce using rule 139 (class-name) ".*" [reduce using rule 248 (enum-name)] ".*" [reduce using rule 743 (typedef-name)] "->*" reduce using rule 139 (class-name) "->*" [reduce using rule 248 (enum-name)] "->*" [reduce using rule 743 (typedef-name)] "try" reduce using rule 139 (class-name) "try" [reduce using rule 248 (enum-name)] "try" [reduce using rule 743 (typedef-name)] "import" reduce using rule 139 (class-name) "import" [reduce using rule 248 (enum-name)] "import" [reduce using rule 743 (typedef-name)] "namespace" reduce using rule 139 (class-name) "namespace" [reduce using rule 248 (enum-name)] "namespace" [reduce using rule 743 (typedef-name)] "requires" reduce using rule 139 (class-name) "requires" [reduce using rule 248 (enum-name)] "requires" [reduce using rule 743 (typedef-name)] "~" reduce using rule 139 (class-name) "~" [reduce using rule 248 (enum-name)] "~" [reduce using rule 743 (typedef-name)] "++" reduce using rule 139 (class-name) "++" [reduce using rule 248 (enum-name)] "++" [reduce using rule 743 (typedef-name)] "--" reduce using rule 139 (class-name) "--" [reduce using rule 248 (enum-name)] "--" [reduce using rule 743 (typedef-name)] "auto" reduce using rule 139 (class-name) "auto" [reduce using rule 248 (enum-name)] "auto" [reduce using rule 743 (typedef-name)] "char" reduce using rule 139 (class-name) "char" [reduce using rule 248 (enum-name)] "char" [reduce using rule 743 (typedef-name)] "char8_t" reduce using rule 139 (class-name) "char8_t" [reduce using rule 248 (enum-name)] "char8_t" [reduce using rule 743 (typedef-name)] "char16_t" reduce using rule 139 (class-name) "char16_t" [reduce using rule 248 (enum-name)] "char16_t" [reduce using rule 743 (typedef-name)] "char32_t" reduce using rule 139 (class-name) "char32_t" [reduce using rule 248 (enum-name)] "char32_t" [reduce using rule 743 (typedef-name)] "wchar_t" reduce using rule 139 (class-name) "wchar_t" [reduce using rule 248 (enum-name)] "wchar_t" [reduce using rule 743 (typedef-name)] "bool" reduce using rule 139 (class-name) "bool" [reduce using rule 248 (enum-name)] "bool" [reduce using rule 743 (typedef-name)] "short" reduce using rule 139 (class-name) "short" [reduce using rule 248 (enum-name)] "short" [reduce using rule 743 (typedef-name)] "int" reduce using rule 139 (class-name) "int" [reduce using rule 248 (enum-name)] "int" [reduce using rule 743 (typedef-name)] "long" reduce using rule 139 (class-name) "long" [reduce using rule 248 (enum-name)] "long" [reduce using rule 743 (typedef-name)] "signed" reduce using rule 139 (class-name) "signed" [reduce using rule 248 (enum-name)] "signed" [reduce using rule 743 (typedef-name)] "unsigned" reduce using rule 139 (class-name) "unsigned" [reduce using rule 248 (enum-name)] "unsigned" [reduce using rule 743 (typedef-name)] "float" reduce using rule 139 (class-name) "float" [reduce using rule 248 (enum-name)] "float" [reduce using rule 743 (typedef-name)] "double" reduce using rule 139 (class-name) "double" [reduce using rule 248 (enum-name)] "double" [reduce using rule 743 (typedef-name)] "void" reduce using rule 139 (class-name) "void" [reduce using rule 248 (enum-name)] "void" [reduce using rule 743 (typedef-name)] "static_assert" reduce using rule 139 (class-name) "static_assert" [reduce using rule 248 (enum-name)] "static_assert" [reduce using rule 743 (typedef-name)] "static" reduce using rule 139 (class-name) "static" [reduce using rule 248 (enum-name)] "static" [reduce using rule 743 (typedef-name)] "thread_local" reduce using rule 139 (class-name) "thread_local" [reduce using rule 248 (enum-name)] "thread_local" [reduce using rule 743 (typedef-name)] "mutable" reduce using rule 139 (class-name) "mutable" [reduce using rule 248 (enum-name)] "mutable" [reduce using rule 743 (typedef-name)] "override" reduce using rule 139 (class-name) "override" [reduce using rule 248 (enum-name)] "override" [reduce using rule 743 (typedef-name)] $default reduce using rule 139 (class-name)
772 unqualified-id → "~" decltype-specifier • $default reduce using rule 772 (unqualified-id)
771 unqualified-id → "~" type-name • $default reduce using rule 771 (unqualified-id)
750 unary-expression → "++" cast-expression • $default reduce using rule 750 (unary-expression)
751 unary-expression → "--" cast-expression • $default reduce using rule 751 (unary-expression)
136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 582 postfix-expression → "dynamic_cast" "<" • type-id ">" "(" expression ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) class-key go to state 424 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 785 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 109
136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 583 postfix-expression → "static_cast" "<" • type-id ">" "(" expression ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) class-key go to state 424 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 786 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 109
136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 584 postfix-expression → "reinterpret_cast" "<" • type-id ">" "(" expression ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) class-key go to state 424 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 787 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 109
136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 585 postfix-expression → "const_cast" "<" • type-id ">" "(" expression ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) class-key go to state 424 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 788 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 109
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 586 | "typeid" "(" • expression ")" 587 | • "typeid" "(" type-id ")" 587 | "typeid" "(" • type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-key go to state 424 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 789 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 427 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 790 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
55 assignment-expression-opt → assignment-expression • $default reduce using rule 55 (assignment-expression-opt)
713 throw-expression → "throw" assignment-expression-opt • $default reduce using rule 713 (throw-expression)
755 unary-expression → "sizeof" "..." • "(" IDENTIFIER ")" "(" shift, and go to state 791
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 288 | "(" • cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 289 | "(" • "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 290 | "(" • cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 591 | "(" • expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 754 | "sizeof" "(" • type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list "..." shift, and go to state 457 IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 458 character-literal go to state 279 class-key go to state 424 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 459 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 427 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 792 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
753 unary-expression → "sizeof" unary-expression • $default reduce using rule 753 (unary-expression)
136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 756 unary-expression → "alignof" "(" • type-id ")" IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) class-key go to state 424 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 793 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 109
794 yield-expression → "co_yield" assignment-expression • $default reduce using rule 794 (yield-expression)
795 yield-expression → "co_yield" braced-init-list • $default reduce using rule 795 (yield-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 224 | SCOPE-opt "delete" • cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 225 | SCOPE-opt "delete" • "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 794 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 795 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
477 new-expression → SCOPE-opt "new" • new-placement-opt new-type-id new-initializer-opt 478 | SCOPE-opt "new" • new-placement-opt "(" type-id ")" new-initializer-opt 483 new-placement → • "(" expression-list ")" 484 new-placement-opt → • %empty [IDENTIFIER, "::", "typename", "(", "class", "struct", "union", "const", "volatile", "decltype", "enum", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void"] 485 | • new-placement "(" shift, and go to state 796 "(" [reduce using rule 484 (new-placement-opt)] $default reduce using rule 484 (new-placement-opt) new-placement go to state 797 new-placement-opt go to state 798
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 42 additive-expression → additive-expression "+" • multiplicative-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 799 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 43 additive-expression → additive-expression "-" • multiplicative-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 800 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 48 and-expression → and-expression "&" • equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 801 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 149 compare-expression → compare-expression "<=>" • shift-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 shift-expression go to state 802 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 259 equality-expression → equality-expression "==" • relational-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 803 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 260 equality-expression → equality-expression "!=" • relational-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 804 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 265 exclusive-or-expression → exclusive-or-expression "^" • and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 805 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 280 expression → expression "," • assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 806 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
216 decltype-specifier → "decltype" "(" expression ")" • $default reduce using rule 216 (decltype-specifier)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 348 inclusive-or-expression → inclusive-or-expression "|" • exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 807 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 389 lambda-declarator → "(" • parameter-declaration-clause ")" lambda-specifiers requires-clause-opt 554 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 555 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 556 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 557 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 558 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 559 | • parameter-declaration-list "," "..." 560 parameter-declaration-list → • parameter-declaration 561 | • parameter-declaration-list "," parameter-declaration 562 parameter-declaration-list-opt → • %empty ["...", ")"] 563 | • parameter-declaration-list "..." reduce using rule 562 (parameter-declaration-list-opt) ")" reduce using rule 562 (parameter-declaration-list-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 parameter-declaration go to state 639 parameter-declaration-clause go to state 808 parameter-declaration-list go to state 641 parameter-declaration-list-opt go to state 642
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 391 lambda-expression → lambda-introducer "<" • template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 554 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 555 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 556 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 557 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 709 template-parameter → • type-parameter 710 | • parameter-declaration 711 template-parameter-list → • template-parameter 712 | • template-parameter-list "," template-parameter 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 728 type-parameter → • type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 729 | • type-parameter-key IDENTIFIER-opt "=" type-id 730 | • type-constraint ELLIPSIS-opt IDENTIFIER-opt 731 | • type-constraint IDENTIFIER-opt "=" type-id 732 | • template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt 733 | • template-head type-parameter-key IDENTIFIER-opt "=" id-expression 734 type-parameter-key → • "class" 735 | • "typename" 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "template" shift, and go to state 216 "typename" shift, and go to state 217 "class" shift, and go to state 218 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 221 parameter-declaration go to state 222 simple-template-id go to state 96 template-head go to state 223 template-name go to state 102 template-parameter go to state 224 template-parameter-list go to state 809 type-constraint go to state 226 type-name go to state 106 type-parameter go to state 227 type-parameter-key go to state 228 typedef-name go to state 108
194 decl-specifier-seq-opt → decl-specifier-seq • $default reduce using rule 194 (decl-specifier-seq-opt)
393 lambda-specifiers → decl-specifier-seq-opt • noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 489 noexcept-specifier → • "noexcept" "(" constant-expression ")" 490 | • "noexcept" 491 noexcept-specifier-opt → • %empty ["alignas", "[", "{", "->", "requires"] 492 | • noexcept-specifier "noexcept" shift, and go to state 810 $default reduce using rule 491 (noexcept-specifier-opt) noexcept-specifier go to state 811 noexcept-specifier-opt go to state 812
151 compound-statement → • "{" statement-seq-opt "}" 390 lambda-expression → lambda-introducer lambda-declarator • compound-statement "{" shift, and go to state 813 compound-statement go to state 814
388 lambda-declarator → lambda-specifiers • $default reduce using rule 388 (lambda-declarator)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 171 conversion-function-id → • "operator" conversion-type-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 695 template-argument → • constant-expression 696 | • type-id 697 | • id-expression 698 template-argument-list → • template-argument ELLIPSIS-opt 699 | • template-argument-list "," template-argument ELLIPSIS-opt 700 template-argument-list-opt → • %empty [">"] 701 | • template-argument-list 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 707 | literal-operator-id "<" • template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] ">" reduce using rule 700 (template-argument-list-opt) "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-key go to state 424 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 425 conversion-function-id go to state 282 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 426 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 427 string-literal go to state 313 template-argument go to state 428 template-argument-list go to state 429 template-argument-list-opt go to state 815 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 431 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 406 logical-and-expression → logical-and-expression "&&" • inclusive-or-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 816 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
56 assignment-operator → "=" • $default reduce using rule 56 (assignment-operator)
57 assignment-operator → "*=" • $default reduce using rule 57 (assignment-operator)
58 assignment-operator → "/=" • $default reduce using rule 58 (assignment-operator)
59 assignment-operator → "%=" • $default reduce using rule 59 (assignment-operator)
60 assignment-operator → "+=" • $default reduce using rule 60 (assignment-operator)
61 assignment-operator → "-=" • $default reduce using rule 61 (assignment-operator)
62 assignment-operator → ">>=" • $default reduce using rule 62 (assignment-operator)
63 assignment-operator → "<<=" • $default reduce using rule 63 (assignment-operator)
64 assignment-operator → "&=" • $default reduce using rule 64 (assignment-operator)
65 assignment-operator → "^=" • $default reduce using rule 65 (assignment-operator)
66 assignment-operator → "|=" • $default reduce using rule 66 (assignment-operator)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 159 | logical-or-expression "?" • expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 817 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 408 logical-or-expression → logical-or-expression "||" • logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 818 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 53 | logical-or-expression assignment-operator • initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 364 initializer-clause → • assignment-expression 365 | • braced-init-list 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 819 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 451 multiplicative-expression → multiplicative-expression "*" • pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 820 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 452 multiplicative-expression → multiplicative-expression "/" • pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 821 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 453 multiplicative-expression → multiplicative-expression "%" • pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 822 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
171 conversion-function-id → • "operator" conversion-type-id 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 468 nested-name-specifier → nested-name-specifier TEMPLATE-opt • simple-template-id "::" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 612 qualified-id → nested-name-specifier TEMPLATE-opt • unqualified-id 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id IDENTIFIER shift, and go to state 823 "operator" shift, and go to state 251 "~" shift, and go to state 354 conversion-function-id go to state 282 literal-operator-id go to state 295 operator-function-id go to state 302 simple-template-id go to state 824 template-id go to state 314 template-name go to state 102 unqualified-id go to state 825
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 171 conversion-function-id → • "operator" conversion-type-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 695 template-argument → • constant-expression 696 | • type-id 697 | • id-expression 698 template-argument-list → • template-argument ELLIPSIS-opt 699 | • template-argument-list "," template-argument ELLIPSIS-opt 700 template-argument-list-opt → • %empty [">"] 701 | • template-argument-list 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 706 | operator-function-id "<" • template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] ">" reduce using rule 700 (template-argument-list-opt) "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-key go to state 424 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 425 conversion-function-id go to state 282 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 426 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 427 string-literal go to state 313 template-argument go to state 428 template-argument-list go to state 429 template-argument-list-opt go to state 826 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 431 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 568 pm-expression → pm-expression ".*" • cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 827 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 569 pm-expression → pm-expression "->*" • cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 828 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 281 expression-list → • initializer-list 282 expression-list-opt → • %empty [")"] 283 | • expression-list 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 364 initializer-clause → • assignment-expression 365 | • braced-init-list 366 initializer-list → • initializer-clause ELLIPSIS-opt 367 | • initializer-list "," initializer-clause ELLIPSIS-opt 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 573 | postfix-expression "(" • expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] ")" reduce using rule 282 (expression-list-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression-list go to state 829 expression-list-opt go to state 830 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 666 initializer-list go to state 667 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 281 expression-list → • initializer-list 282 expression-list-opt → • %empty ["]"] 283 | • expression-list 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 364 initializer-clause → • assignment-expression 365 | • braced-init-list 366 initializer-list → • initializer-clause ELLIPSIS-opt 367 | • initializer-list "," initializer-clause ELLIPSIS-opt 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 572 | postfix-expression "[" • expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "]" reduce using rule 282 (expression-list-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression-list go to state 829 expression-list-opt go to state 831 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 666 initializer-list go to state 667 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
21 TEMPLATE-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 22 | • "template" 579 postfix-expression → postfix-expression "->" • TEMPLATE-opt id-expression "template" shift, and go to state 230 $default reduce using rule 21 (TEMPLATE-opt) TEMPLATE-opt go to state 832
21 TEMPLATE-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 22 | • "template" 578 postfix-expression → postfix-expression "." • TEMPLATE-opt id-expression "template" shift, and go to state 230 $default reduce using rule 21 (TEMPLATE-opt) TEMPLATE-opt go to state 833
580 postfix-expression → postfix-expression "++" • $default reduce using rule 580 (postfix-expression)
581 postfix-expression → postfix-expression "--" • $default reduce using rule 581 (postfix-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 619 relational-expression → relational-expression "<" • compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 834 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 620 relational-expression → relational-expression ">" • compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 835 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 621 relational-expression → relational-expression "<=" • compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 836 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 622 relational-expression → relational-expression ">=" • compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 837 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 646 shift-expression → shift-expression "<<" • additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 838 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 647 shift-expression → shift-expression ">>" • additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 839 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 281 expression-list → • initializer-list 282 expression-list-opt → • %empty [")"] 283 | • expression-list 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 364 initializer-clause → • assignment-expression 365 | • braced-init-list 366 initializer-list → • initializer-clause ELLIPSIS-opt 367 | • initializer-list "," initializer-clause ELLIPSIS-opt 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 574 | simple-type-specifier "(" • expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] ")" reduce using rule 282 (expression-list-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression-list go to state 829 expression-list-opt go to state 840 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 666 initializer-list go to state 667 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
576 postfix-expression → simple-type-specifier braced-init-list • $default reduce using rule 576 (postfix-expression)
747 ud-suffix → IDENTIFIER • $default reduce using rule 747 (ud-suffix)
781 user-defined-string-literal → string-literal ud-suffix • $default reduce using rule 781 (user-defined-string-literal)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 281 expression-list → • initializer-list 282 expression-list-opt → • %empty [")"] 283 | • expression-list 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 364 initializer-clause → • assignment-expression 365 | • braced-init-list 366 initializer-list → • initializer-clause ELLIPSIS-opt 367 | • initializer-list "," initializer-clause ELLIPSIS-opt 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 575 | typename-specifier "(" • expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] ")" reduce using rule 282 (expression-list-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression-list go to state 829 expression-list-opt go to state 841 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 666 initializer-list go to state 667 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
577 postfix-expression → typename-specifier braced-init-list • $default reduce using rule 577 (postfix-expression)
749 unary-expression → unary-operator cast-expression • $default reduce using rule 749 (unary-expression)
268 explicit-specifier → "explicit" "(" constant-expression ")" • $default reduce using rule 268 (explicit-specifier)
447 module-partition → ":" module-name-qualifier-opt IDENTIFIER • $default reduce using rule 447 (module-partition)
441 module-import-declaration → "import" header-name attribute-specifier-seq-opt ";" • $default reduce using rule 441 (module-import-declaration)
439 module-import-declaration → "import" module-name attribute-specifier-seq-opt ";" • $default reduce using rule 439 (module-import-declaration)
444 module-name-qualifier → module-name-qualifier IDENTIFIER "." • $default reduce using rule 444 (module-name-qualifier)
440 module-import-declaration → "import" module-partition attribute-specifier-seq-opt ";" • $default reduce using rule 440 (module-import-declaration)
455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 613 qualified-namespace-specifier → nested-name-specifier-opt • namespace-name IDENTIFIER shift, and go to state 842 namespace-alias go to state 85 namespace-name go to state 843
456 namespace-alias-definition → "namespace" IDENTIFIER "=" qualified-namespace-specifier • ";" ";" shift, and go to state 844
14 INLINE-opt → "inline" • $default reduce using rule 14 (INLINE-opt)
237 enclosing-namespace-specifier → enclosing-namespace-specifier "::" INLINE-opt • IDENTIFIER 471 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt • IDENTIFIER "{" namespace-body "}" IDENTIFIER shift, and go to state 845
689 static_assert-declaration → "static_assert" "(" constant-expression "," • string-literal ")" ";" 694 string-literal → • STRING_LITERAL STRING_LITERAL shift, and go to state 118 string-literal go to state 846
688 static_assert-declaration → "static_assert" "(" constant-expression ")" • ";" ";" shift, and go to state 847
454 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER • "{" namespace-body "}" "{" shift, and go to state 848
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 208 declaration-seq → • declaration 209 | • declaration-seq declaration 210 declaration-seq-opt → • %empty ["}"] 211 | • declaration-seq 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 273 | • "export" "{" declaration-seq-opt "}" 274 | • "export" module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 395 | • "extern" string-literal declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 457 namespace-body → • declaration-seq-opt 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 766 | INLINE-opt "namespace" attribute-specifier-seq-opt "{" • namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 210 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 849 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-body go to state 850 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
653 simple-declaration → attribute-specifier-seq decl-specifier-seq init-declarator-list ";" • $default reduce using rule 653 (simple-declaration)
244 enum-head-name-opt → enum-head-name • $default reduce using rule 244 (enum-head-name-opt)
455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 786 using-directive → attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt • namespace-name ";" IDENTIFIER shift, and go to state 842 namespace-alias go to state 85 namespace-name go to state 851
5 ELLIPSIS-opt → • %empty [")"] 6 | • "..." 46 alignment-specifier → "alignas" "(" constant-expression • ELLIPSIS-opt ")" "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 852
5 ELLIPSIS-opt → • %empty [")"] 6 | • "..." 45 alignment-specifier → "alignas" "(" type-id • ELLIPSIS-opt ")" "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 853
502 noptr-declarator → noptr-declarator parameters-and-qualifiers • $default reduce using rule 502 (noptr-declarator)
504 noptr-declarator → "(" ptr-declarator ")" • $default reduce using rule 504 (noptr-declarator)
49 asm-declaration → attribute-specifier-seq-opt "asm" "(" string-literal • ")" ";" ")" shift, and go to state 854
76 attribute-namespace → • IDENTIFIER 87 attribute-using-prefix → "using" • attribute-namespace ":" IDENTIFIER shift, and go to state 855 attribute-namespace go to state 856
89 attribute-using-prefix-opt → attribute-using-prefix • $default reduce using rule 89 (attribute-using-prefix-opt)
67 attribute → • attribute-token attribute-argument-clause-opt 72 attribute-list → • attribute-opt 73 | • attribute-list "," attribute-opt 74 | • attribute "..." 75 | • attribute-list "," attribute "..." 76 attribute-namespace → • IDENTIFIER 77 attribute-opt → • %empty [",", "]"] 78 | • attribute 79 attribute-scoped-token → • attribute-namespace "::" IDENTIFIER 80 attribute-specifier → "[" "[" attribute-using-prefix-opt • attribute-list "]" "]" 85 attribute-token → • IDENTIFIER 86 | • attribute-scoped-token IDENTIFIER shift, and go to state 857 $default reduce using rule 77 (attribute-opt) attribute go to state 858 attribute-list go to state 859 attribute-namespace go to state 860 attribute-opt go to state 861 attribute-scoped-token go to state 862 attribute-token go to state 863
177 cv-qualifier → • "const" 178 | • "volatile" 179 cv-qualifier-seq → • cv-qualifier cv-qualifier-seq-opt 179 | cv-qualifier • cv-qualifier-seq-opt 180 cv-qualifier-seq-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 181 | • cv-qualifier-seq "const" shift, and go to state 15 "volatile" shift, and go to state 16 "const" [reduce using rule 180 (cv-qualifier-seq-opt)] "volatile" [reduce using rule 180 (cv-qualifier-seq-opt)] $default reduce using rule 180 (cv-qualifier-seq-opt) cv-qualifier go to state 628 cv-qualifier-seq go to state 629 cv-qualifier-seq-opt go to state 864
181 cv-qualifier-seq-opt → cv-qualifier-seq • $default reduce using rule 181 (cv-qualifier-seq-opt)
605 ptr-operator → "*" attribute-specifier-seq-opt cv-qualifier-seq-opt • $default reduce using rule 605 (ptr-operator)
345 identifier-list → • IDENTIFIER 346 | • identifier-list "," IDENTIFIER 654 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" • identifier-list "]" initializer ";" IDENTIFIER shift, and go to state 865 identifier-list go to state 866
789 virt-specifier → "final" • $default reduce using rule 789 (virt-specifier)
788 virt-specifier → "override" • $default reduce using rule 788 (virt-specifier)
174 ctor-initializer → • ":" mem-initializer-list 175 ctor-initializer-opt → • %empty ["{"] 176 | • ctor-initializer 326 function-body → • ctor-initializer-opt compound-statement 327 | • function-try-block 328 | • "=" "default" ";" 329 | • "=" "delete" ";" 331 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause • function-body 334 function-try-block → • "try" ctor-initializer-opt compound-statement handler-seq "=" shift, and go to state 867 ":" shift, and go to state 868 "try" shift, and go to state 869 $default reduce using rule 175 (ctor-initializer-opt) ctor-initializer go to state 870 ctor-initializer-opt go to state 871 function-body go to state 872 function-try-block go to state 873
790 virt-specifier-seq → virt-specifier • $default reduce using rule 790 (virt-specifier-seq)
788 virt-specifier → • "override" 789 | • "final" 791 virt-specifier-seq → virt-specifier-seq • virt-specifier 793 virt-specifier-seq-opt → virt-specifier-seq • [",", "=", ";", ":", "{", "try"] "final" shift, and go to state 632 "override" shift, and go to state 633 $default reduce using rule 793 (virt-specifier-seq-opt) virt-specifier go to state 874
174 ctor-initializer → • ":" mem-initializer-list 175 ctor-initializer-opt → • %empty ["{"] 176 | • ctor-initializer 326 function-body → • ctor-initializer-opt compound-statement 327 | • function-try-block 328 | • "=" "default" ";" 329 | • "=" "delete" ";" 330 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt • function-body 334 function-try-block → • "try" ctor-initializer-opt compound-statement handler-seq "=" shift, and go to state 867 ":" shift, and go to state 868 "try" shift, and go to state 869 $default reduce using rule 175 (ctor-initializer-opt) ctor-initializer go to state 870 ctor-initializer-opt go to state 871 function-body go to state 875 function-try-block go to state 873
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 177 cv-qualifier → • "const" 178 | • "volatile" 179 cv-qualifier-seq → • cv-qualifier cv-qualifier-seq-opt 180 cv-qualifier-seq-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 181 | • cv-qualifier-seq 608 ptr-operator → nested-name-specifier "*" attribute-specifier-seq-opt • cv-qualifier-seq-opt "alignas" shift, and go to state 158 "[" shift, and go to state 162 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "alignas" [reduce using rule 180 (cv-qualifier-seq-opt)] "[" [reduce using rule 180 (cv-qualifier-seq-opt)] "const" [reduce using rule 180 (cv-qualifier-seq-opt)] "volatile" [reduce using rule 180 (cv-qualifier-seq-opt)] $default reduce using rule 180 (cv-qualifier-seq-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 cv-qualifier go to state 628 cv-qualifier-seq go to state 629 cv-qualifier-seq-opt go to state 876
560 parameter-declaration-list → parameter-declaration • $default reduce using rule 560 (parameter-declaration-list)
564 parameters-and-qualifiers → "(" parameter-declaration-clause • ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt ")" shift, and go to state 877
559 parameter-declaration-clause → parameter-declaration-list • "," "..." 561 parameter-declaration-list → parameter-declaration-list • "," parameter-declaration 563 parameter-declaration-list-opt → parameter-declaration-list • ["...", ")"] "," shift, and go to state 878 $default reduce using rule 563 (parameter-declaration-list-opt)
5 ELLIPSIS-opt → • %empty [")"] 6 | • "..." 558 parameter-declaration-clause → parameter-declaration-list-opt • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 879
162 constant-expression-opt → constant-expression • $default reduce using rule 162 (constant-expression-opt)
503 noptr-declarator → noptr-declarator "[" constant-expression-opt • "]" attribute-specifier-seq-opt "]" shift, and go to state 880
136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 714 trailing-return-type → "->" • type-id 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) class-key go to state 424 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 881 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 109
214 declarator → noptr-declarator parameters-and-qualifiers trailing-return-type • $default reduce using rule 214 (declarator)
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", ";", "alignas", "(", "&", "[", ":", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 235 empty-declaration → • ";" 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 415 member-declaration → • attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" 416 | • function-definition 417 | • using-declaration 418 | • using-enum-declaration 419 | • static_assert-declaration 420 | • template-declaration 421 | • explicit-specialization 422 | • deduction-guide 423 | • alias-declaration 424 | • opaque-enum-declaration 425 | • empty-declaration 434 member-specification → • member-declaration member-specification-opt 435 | • access-specifier ":" member-specification-opt 435 | access-specifier ":" • member-specification-opt 436 member-specification-opt → • %empty ["}"] 437 | • member-specification 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 782 using-declaration → • "using" using-declarator-list ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "template" shift, and go to state 7 "private" shift, and go to state 369 "protected" shift, and go to state 370 "public" shift, and go to state 371 "using" shift, and go to state 10 ";" shift, and go to state 11 "enum" shift, and go to state 372 "explicit" shift, and go to state 23 "static_assert" shift, and go to state 41 IDENTIFIER reduce using rule 83 (attribute-specifier-seq-opt) IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] ";" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 436 (member-specification-opt) "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) access-specifier go to state 373 alias-declaration go to state 374 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 375 deduction-guide go to state 376 empty-declaration go to state 377 enum-key go to state 378 explicit-specialization go to state 379 explicit-specifier go to state 380 explicit-specifier-opt go to state 76 function-definition go to state 381 member-declaration go to state 382 member-specification go to state 383 member-specification-opt go to state 882 opaque-enum-declaration go to state 385 static_assert-declaration go to state 386 template-declaration go to state 387 template-head go to state 101 using-declaration go to state 388 using-enum-declaration go to state 389
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["alignas", "[", ":"] 12 | • IDENTIFIER 139 class-name → • IDENTIFIER 140 | • simple-template-id 213 declarator → • ptr-declarator 214 | • noptr-declarator parameters-and-qualifiers trailing-return-type 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 330 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt • declarator virt-specifier-seq-opt function-body 331 | attribute-specifier-seq-opt decl-specifier-seq-opt • declarator requires-clause function-body 415 member-declaration → attribute-specifier-seq-opt decl-specifier-seq-opt • member-declarator-list-opt ";" 426 member-declarator → • declarator virt-specifier-seq-opt pure-specifier-opt 427 | • declarator requires-clause 428 | • declarator brace-or-equal-initializer-opt 429 | • IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt 430 member-declarator-list → • member-declarator 431 | • member-declarator-list "," member-declarator 432 member-declarator-list-opt → • %empty [";"] 433 | • member-declarator-list 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 883 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] ";" reduce using rule 432 (member-declarator-list-opt) "operator" reduce using rule 5 (ELLIPSIS-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) $default reduce using rule 11 (IDENTIFIER-opt) ELLIPSIS-opt go to state 165 IDENTIFIER-opt go to state 884 class-name go to state 55 declarator go to state 885 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 member-declarator go to state 886 member-declarator-list go to state 887 member-declarator-list-opt go to state 888 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 242 enum-head-name → • nested-name-specifier-opt IDENTIFIER 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → enum-key attribute-specifier-seq-opt • enum-head-name enum-base-opt ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] alignment-specifier go to state 166 attribute-specifier go to state 167 class-name go to state 55 decltype-specifier go to state 121 enum-head-name go to state 889 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 414 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
434 member-specification → member-declaration member-specification-opt • $default reduce using rule 434 (member-specification)
144 class-specifier → class-head "{" member-specification-opt "}" • $default reduce using rule 144 (class-specifier)
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 102 base-specifier → attribute-specifier-seq-opt • class-or-decltype 103 | attribute-specifier-seq-opt • "virtual" access-specifier-opt class-or-decltype 104 | attribute-specifier-seq-opt • access-specifier VIRTUAL-opt class-or-decltype 139 class-name → • IDENTIFIER 140 | • simple-template-id 141 class-or-decltype → • nested-name-specifier-opt type-name 142 | • nested-name-specifier "template" simple-template-id 143 | • decltype-specifier 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "virtual" shift, and go to state 890 "private" shift, and go to state 369 "protected" shift, and go to state 370 "public" shift, and go to state 371 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] access-specifier go to state 891 alignment-specifier go to state 166 attribute-specifier go to state 167 class-name go to state 55 class-or-decltype go to state 892 decltype-specifier go to state 893 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 894 nested-name-specifier-opt go to state 895 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
5 ELLIPSIS-opt → • %empty [",", "{"] 6 | • "..." 105 base-specifier-list → base-specifier • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 896
99 base-clause → ":" base-specifier-list • ["{"] 106 base-specifier-list → base-specifier-list • "," base-specifier ELLIPSIS-opt "," shift, and go to state 897 $default reduce using rule 99 (base-clause)
145 class-virt-specifier → "final" • $default reduce using rule 145 (class-virt-specifier)
147 class-virt-specifier-opt → class-virt-specifier • $default reduce using rule 147 (class-virt-specifier-opt)
99 base-clause → • ":" base-specifier-list 100 base-clause-opt → • %empty ["{"] 101 | • base-clause 133 class-head → class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt • base-clause-opt ":" shift, and go to state 390 $default reduce using rule 100 (base-clause-opt) base-clause go to state 391 base-clause-opt go to state 898
139 class-name → IDENTIFIER • [":", "{", "final"] 231 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER • [",", "constexpr", "...", "extern", IDENTIFIER, "inline", "noexcept", "::", "typename", "virtual", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", ">", "explicit", "*", "requires", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 708 template-name → IDENTIFIER • ["<"] ":" reduce using rule 139 (class-name) ":" [reduce using rule 231 (elaborated-type-specifier)] "{" reduce using rule 139 (class-name) "{" [reduce using rule 231 (elaborated-type-specifier)] "final" reduce using rule 139 (class-name) "<" reduce using rule 708 (template-name) $default reduce using rule 231 (elaborated-type-specifier)
135 class-head-name → nested-name-specifier-opt class-name • $default reduce using rule 135 (class-head-name)
140 class-name → simple-template-id • $default reduce using rule 140 (class-name)
233 elaborated-type-specifier → class-key nested-name-specifier TEMPLATE-opt simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 468 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id • "::" "::" shift, and go to state 693 "::" [reduce using rule 233 (elaborated-type-specifier)] $default reduce using rule 233 (elaborated-type-specifier)
364 initializer-clause → assignment-expression • $default reduce using rule 364 (initializer-clause)
365 initializer-clause → braced-init-list • $default reduce using rule 365 (initializer-clause)
117 brace-or-equal-initializer → "=" initializer-clause • $default reduce using rule 117 (brace-or-equal-initializer)
363 initializer → "(" expression-list • ")" ")" shift, and go to state 899
5 ELLIPSIS-opt → • %empty [",", ")", "]", "}"] 6 | • "..." 366 initializer-list → initializer-clause • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 900
281 expression-list → initializer-list • [")", "]"] 367 initializer-list → initializer-list • "," initializer-clause ELLIPSIS-opt "," shift, and go to state 901 $default reduce using rule 281 (expression-list)
123 braced-init-list → "{" "}" • $default reduce using rule 123 (braced-init-list)
229 designator → "." • IDENTIFIER IDENTIFIER shift, and go to state 902
227 designated-initializer-list → designated-initializer-clause • $default reduce using rule 227 (designated-initializer-list)
1 COMMA-opt → • %empty ["}"] 2 | • "," 122 braced-init-list → "{" designated-initializer-list • COMMA-opt "}" 228 designated-initializer-list → designated-initializer-list • "," designated-initializer-clause "," shift, and go to state 903 $default reduce using rule 1 (COMMA-opt) COMMA-opt go to state 904
117 brace-or-equal-initializer → • "=" initializer-clause 118 | • braced-init-list 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 226 designated-initializer-clause → designator • brace-or-equal-initializer "=" shift, and go to state 396 "{" shift, and go to state 398 brace-or-equal-initializer go to state 905 braced-init-list go to state 401
1 COMMA-opt → • %empty ["}"] 2 | • "," 121 braced-init-list → "{" initializer-list • COMMA-opt "}" 367 initializer-list → initializer-list • "," initializer-clause ELLIPSIS-opt "," shift, and go to state 906 $default reduce using rule 1 (COMMA-opt) COMMA-opt go to state 907
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 288 | "(" • cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 289 | "(" • "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 290 | "(" • cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 591 | "(" • expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list "..." shift, and go to state 457 IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 458 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 459 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
165 constraint-logical-and-expression → constraint-logical-and-expression • "&&" primary-expression 166 constraint-logical-or-expression → constraint-logical-and-expression • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "using", "=", ";", "alignas", "(", "&", "asm", "[", ":", "{", "class", "struct", "union", "concept", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", "explicit", "*", "try", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] "&&" shift, and go to state 908 "&&" [reduce using rule 166 (constraint-logical-or-expression)] $default reduce using rule 166 (constraint-logical-or-expression)
167 constraint-logical-or-expression → constraint-logical-or-expression • "||" constraint-logical-and-expression 633 requires-clause → "requires" constraint-logical-or-expression • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "using", "=", ";", "alignas", "(", "&", "asm", "[", ":", "{", "class", "struct", "union", "concept", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", "explicit", "*", "try", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] "||" shift, and go to state 909 $default reduce using rule 633 (requires-clause)
164 constraint-logical-and-expression → primary-expression • $default reduce using rule 164 (constraint-logical-and-expression)
354 init-declarator-list → init-declarator-list "," init-declarator • $default reduce using rule 354 (init-declarator-list)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 251 enumerator → IDENTIFIER attribute-specifier-seq-opt • [",", "=", "}"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 $default reduce using rule 251 (enumerator) alignment-specifier go to state 166 attribute-specifier go to state 167
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 253 enumerator-definition → enumerator "=" • constant-expression 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 910 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
250 enum-specifier → enum-head "{" enumerator-list "," • "}" 251 enumerator → • IDENTIFIER attribute-specifier-seq-opt 252 enumerator-definition → • enumerator 253 | • enumerator "=" constant-expression 255 enumerator-list → enumerator-list "," • enumerator-definition IDENTIFIER shift, and go to state 407 "}" shift, and go to state 911 enumerator go to state 408 enumerator-definition go to state 912
249 enum-specifier → enum-head "{" enumerator-list-opt "}" • $default reduce using rule 249 (enum-specifier)
136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 238 enum-base → ":" • type-specifier-seq 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) class-key go to state 424 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 913 typedef-name go to state 108 typename-specifier go to state 109
240 enum-base-opt → enum-base • $default reduce using rule 240 (enum-base-opt)
507 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt • ";" ";" shift, and go to state 914
241 enum-head → enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt • $default reduce using rule 241 (enum-head)
242 enum-head-name → nested-name-specifier-opt IDENTIFIER • $default reduce using rule 242 (enum-head-name)
217 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause • ")" "->" simple-template-id ";" ")" shift, and go to state 915
438 module-declaration → EXPORT-opt "module" module-name • module-partition-opt attribute-specifier-seq-opt ";" 447 module-partition → • ":" module-name-qualifier-opt IDENTIFIER 448 module-partition-opt → • %empty [";", "alignas", "["] 449 | • module-partition ":" shift, and go to state 138 $default reduce using rule 448 (module-partition-opt) module-partition go to state 916 module-partition-opt go to state 917
596 private-module-fragment → "module" • ":" "private" ";" declaration-seq-opt ":" shift, and go to state 918
598 private-module-fragment-opt → private-module-fragment • $default reduce using rule 598 (private-module-fragment-opt)
718 translation-unit → global-module-fragment-opt module-declaration declaration-seq-opt private-module-fragment-opt • $default reduce using rule 718 (translation-unit)
468 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id "::" • $default reduce using rule 468 (nested-name-specifier)
721 type-constraint → nested-name-specifier-opt concept-name "<" template-argument-list-opt • ">" ">" shift, and go to state 919
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 152 concept-definition → "concept" concept-name "=" • constraint-expression ";" 163 constraint-expression → • logical-or-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 constraint-expression go to state 920 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 921 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 231 elaborated-type-specifier → class-key attribute-specifier-seq-opt • nested-name-specifier-opt IDENTIFIER 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] alignment-specifier go to state 166 attribute-specifier go to state 167 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 922 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
698 template-argument-list → template-argument ELLIPSIS-opt • $default reduce using rule 698 (template-argument-list)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 171 conversion-function-id → • "operator" conversion-type-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 695 template-argument → • constant-expression 696 | • type-id 697 | • id-expression 699 template-argument-list → template-argument-list "," • template-argument ELLIPSIS-opt 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-key go to state 424 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 425 conversion-function-id go to state 282 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 426 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 427 string-literal go to state 313 template-argument go to state 923 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 431 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
656 simple-template-id → template-name "<" template-argument-list-opt ">" • $default reduce using rule 656 (simple-template-id)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 741 type-specifier-seq → type-specifier attribute-specifier-seq-opt • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "alignas" [reduce using rule 741 (type-specifier-seq)] "[" [reduce using rule 741 (type-specifier-seq)] $default reduce using rule 741 (type-specifier-seq) alignment-specifier go to state 166 attribute-specifier go to state 167
742 type-specifier-seq → type-specifier type-specifier-seq • $default reduce using rule 742 (type-specifier-seq)
500 noptr-abstract-pack-declarator → "..." • $default reduce using rule 500 (noptr-abstract-pack-declarator)
139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 493 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 494 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 495 | • "(" ptr-abstract-declarator ")" 495 | "(" • ptr-abstract-declarator ")" 496 noptr-abstract-declarator-opt → • %empty ["(", "["] 497 | • noptr-abstract-declarator 599 ptr-abstract-declarator → • noptr-abstract-declarator 600 | • ptr-operator ptr-abstract-declarator-opt 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 703 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "(" [reduce using rule 496 (noptr-abstract-declarator-opt)] $default reduce using rule 496 (noptr-abstract-declarator-opt) class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 707 noptr-abstract-declarator-opt go to state 924 ptr-abstract-declarator go to state 925 ptr-operator go to state 926 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
33 abstract-declarator-opt → abstract-declarator • $default reduce using rule 33 (abstract-declarator-opt)
724 type-id → type-specifier-seq abstract-declarator-opt • $default reduce using rule 724 (type-id)
31 abstract-declarator → abstract-pack-declarator • $default reduce using rule 31 (abstract-declarator)
497 noptr-abstract-declarator-opt → noptr-abstract-declarator • ["(", "["] 599 ptr-abstract-declarator → noptr-abstract-declarator • [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] "(" reduce using rule 497 (noptr-abstract-declarator-opt) "(" [reduce using rule 599 (ptr-abstract-declarator)] "[" reduce using rule 497 (noptr-abstract-declarator-opt) $default reduce using rule 599 (ptr-abstract-declarator)
30 abstract-declarator → noptr-abstract-declarator-opt • parameters-and-qualifiers trailing-return-type 493 noptr-abstract-declarator → noptr-abstract-declarator-opt • parameters-and-qualifiers 494 | noptr-abstract-declarator-opt • "[" constant-expression-opt "]" attribute-specifier-seq-opt 564 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "(" shift, and go to state 365 "[" shift, and go to state 927 parameters-and-qualifiers go to state 928
34 abstract-pack-declarator → noptr-abstract-pack-declarator • [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] 498 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator • parameters-and-qualifiers 499 | noptr-abstract-pack-declarator • "[" constant-expression-opt "]" attribute-specifier-seq-opt 564 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "(" shift, and go to state 365 "[" shift, and go to state 929 "(" [reduce using rule 34 (abstract-pack-declarator)] $default reduce using rule 34 (abstract-pack-declarator) parameters-and-qualifiers go to state 930
29 abstract-declarator → ptr-abstract-declarator • $default reduce using rule 29 (abstract-declarator)
34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 35 | ptr-operator • abstract-pack-declarator 139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 493 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 494 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 495 | • "(" ptr-abstract-declarator ")" 496 noptr-abstract-declarator-opt → • %empty ["(", "["] 497 | • noptr-abstract-declarator 498 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 499 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 500 | • "..." 599 ptr-abstract-declarator → • noptr-abstract-declarator 600 | • ptr-operator ptr-abstract-declarator-opt 600 | ptr-operator • ptr-abstract-declarator-opt 601 ptr-abstract-declarator-opt → • %empty [",", "...", "=", ";", "(", ")", ":", "{", "final", ">", "try", "requires", "override"] 602 | • ptr-abstract-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 702 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 703 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "..." [reduce using rule 601 (ptr-abstract-declarator-opt)] "(" [reduce using rule 496 (noptr-abstract-declarator-opt)] "(" [reduce using rule 601 (ptr-abstract-declarator-opt)] "[" reduce using rule 496 (noptr-abstract-declarator-opt) $default reduce using rule 601 (ptr-abstract-declarator-opt) abstract-pack-declarator go to state 931 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 707 noptr-abstract-declarator-opt go to state 924 noptr-abstract-pack-declarator go to state 709 ptr-abstract-declarator go to state 932 ptr-abstract-declarator-opt go to state 933 ptr-operator go to state 711 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
566 placeholder-type-specifier → type-constraint-opt "decltype" "(" "auto" • ")" ")" shift, and go to state 934
394 linkage-specification → "extern" string-literal "{" declaration-seq-opt "}" • $default reduce using rule 394 (linkage-specification)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 29 abstract-declarator → • ptr-abstract-declarator 30 | • noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | • abstract-pack-declarator 32 abstract-declarator-opt → • %empty [",", "...", "=", ")", ">"] 33 | • abstract-declarator 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 139 class-name → • IDENTIFIER 140 | • simple-template-id 213 declarator → • ptr-declarator 214 | • noptr-declarator parameters-and-qualifiers trailing-return-type 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 493 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 494 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 495 | • "(" ptr-abstract-declarator ")" 496 noptr-abstract-declarator-opt → • %empty ["(", "["] 497 | • noptr-abstract-declarator 498 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 499 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 500 | • "..." 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 554 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq • declarator 555 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq • declarator "=" initializer-clause 556 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq • abstract-declarator-opt 557 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq • abstract-declarator-opt "=" initializer-clause 599 ptr-abstract-declarator → • noptr-abstract-declarator 600 | • ptr-operator ptr-abstract-declarator-opt 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 935 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 936 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "..." [reduce using rule 32 (abstract-declarator-opt)] IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 496 (noptr-abstract-declarator-opt)] "[" reduce using rule 496 (noptr-abstract-declarator-opt) "operator" reduce using rule 5 (ELLIPSIS-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) $default reduce using rule 32 (abstract-declarator-opt) ELLIPSIS-opt go to state 165 abstract-declarator go to state 704 abstract-declarator-opt go to state 937 abstract-pack-declarator go to state 706 class-name go to state 55 declarator go to state 938 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 707 noptr-abstract-declarator-opt go to state 708 noptr-abstract-pack-declarator go to state 709 noptr-declarator go to state 173 ptr-abstract-declarator go to state 710 ptr-declarator go to state 174 ptr-operator go to state 939 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
11 IDENTIFIER-opt → • %empty [",", ">"] 12 | • IDENTIFIER 732 type-parameter → template-head type-parameter-key ELLIPSIS-opt • IDENTIFIER-opt IDENTIFIER shift, and go to state 445 $default reduce using rule 11 (IDENTIFIER-opt) IDENTIFIER-opt go to state 940
733 type-parameter → template-head type-parameter-key IDENTIFIER-opt • "=" id-expression "=" shift, and go to state 941
712 template-parameter-list → template-parameter-list "," template-parameter • $default reduce using rule 712 (template-parameter-list)
635 requires-clause-opt → requires-clause • $default reduce using rule 635 (requires-clause-opt)
704 template-head → "template" "<" template-parameter-list ">" requires-clause-opt • $default reduce using rule 704 (template-head)
730 type-parameter → type-constraint ELLIPSIS-opt IDENTIFIER-opt • $default reduce using rule 730 (type-parameter)
136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 731 type-parameter → type-constraint IDENTIFIER-opt "=" • type-id 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) class-key go to state 424 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 942 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 109
728 type-parameter → type-parameter-key ELLIPSIS-opt IDENTIFIER-opt • $default reduce using rule 728 (type-parameter)
136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 729 type-parameter → type-parameter-key IDENTIFIER-opt "=" • type-id 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) class-key go to state 424 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 943 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 109
44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id • ";" ";" shift, and go to state 944
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", ";", "alignas", "(", "&", "[", "&&", "decltype", "*"] 84 | • attribute-specifier-seq 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 222 defining-type-specifier-seq → • defining-type-specifier attribute-specifier-seq-opt 222 | defining-type-specifier • attribute-specifier-seq-opt 223 | • defining-type-specifier defining-type-specifier-seq 223 | defining-type-specifier • defining-type-specifier-seq 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 945 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decltype-specifier go to state 63 defining-type-specifier go to state 725 defining-type-specifier-seq go to state 946 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
29 abstract-declarator → • ptr-abstract-declarator 30 | • noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | • abstract-pack-declarator 32 abstract-declarator-opt → • %empty [";"] 33 | • abstract-declarator 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 218 defining-type-id → defining-type-specifier-seq • abstract-declarator-opt 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 493 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 494 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 495 | • "(" ptr-abstract-declarator ")" 496 noptr-abstract-declarator-opt → • %empty ["(", "["] 497 | • noptr-abstract-declarator 498 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 499 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 500 | • "..." 599 ptr-abstract-declarator → • noptr-abstract-declarator 600 | • ptr-operator ptr-abstract-declarator-opt 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 702 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 703 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "(" [reduce using rule 496 (noptr-abstract-declarator-opt)] "[" reduce using rule 496 (noptr-abstract-declarator-opt) $default reduce using rule 32 (abstract-declarator-opt) abstract-declarator go to state 704 abstract-declarator-opt go to state 947 abstract-pack-declarator go to state 706 class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 707 noptr-abstract-declarator-opt go to state 708 noptr-abstract-pack-declarator go to state 709 ptr-abstract-declarator go to state 710 ptr-operator go to state 711 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
785 using-declarator-list → using-declarator-list "," using-declarator ELLIPSIS-opt • $default reduce using rule 785 (using-declarator-list)
280 expression → expression • "," assignment-expression 488 noexcept-expression → "noexcept" "(" expression • ")" "," shift, and go to state 552 ")" shift, and go to state 948
320 fold-operator → "," • $default reduce using rule 320 (fold-operator)
291 fold-operator → "+" • $default reduce using rule 291 (fold-operator)
292 fold-operator → "-" • $default reduce using rule 292 (fold-operator)
311 fold-operator → "=" • $default reduce using rule 311 (fold-operator)
297 fold-operator → "&" • $default reduce using rule 297 (fold-operator)
303 fold-operator → "*=" • $default reduce using rule 303 (fold-operator)
304 fold-operator → "/=" • $default reduce using rule 304 (fold-operator)
305 fold-operator → "%=" • $default reduce using rule 305 (fold-operator)
301 fold-operator → "+=" • $default reduce using rule 301 (fold-operator)
302 fold-operator → "-=" • $default reduce using rule 302 (fold-operator)
310 fold-operator → ">>=" • $default reduce using rule 310 (fold-operator)
309 fold-operator → "<<=" • $default reduce using rule 309 (fold-operator)
307 fold-operator → "&=" • $default reduce using rule 307 (fold-operator)
306 fold-operator → "^=" • $default reduce using rule 306 (fold-operator)
308 fold-operator → "|=" • $default reduce using rule 308 (fold-operator)
318 fold-operator → "&&" • $default reduce using rule 318 (fold-operator)
319 fold-operator → "||" • $default reduce using rule 319 (fold-operator)
312 fold-operator → "==" • $default reduce using rule 312 (fold-operator)
313 fold-operator → "!=" • $default reduce using rule 313 (fold-operator)
296 fold-operator → "^" • $default reduce using rule 296 (fold-operator)
314 fold-operator → "<" • $default reduce using rule 314 (fold-operator)
315 fold-operator → ">" • $default reduce using rule 315 (fold-operator)
293 fold-operator → "*" • $default reduce using rule 293 (fold-operator)
294 fold-operator → "/" • $default reduce using rule 294 (fold-operator)
295 fold-operator → "%" • $default reduce using rule 295 (fold-operator)
298 fold-operator → "|" • $default reduce using rule 298 (fold-operator)
299 fold-operator → "<<" • $default reduce using rule 299 (fold-operator)
300 fold-operator → ">>" • $default reduce using rule 300 (fold-operator)
316 fold-operator → "<=" • $default reduce using rule 316 (fold-operator)
317 fold-operator → ">=" • $default reduce using rule 317 (fold-operator)
321 fold-operator → ".*" • $default reduce using rule 321 (fold-operator)
322 fold-operator → "->*" • $default reduce using rule 322 (fold-operator)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 289 | "(" "..." fold-operator • cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 949 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
288 fold-expression → "(" cast-expression fold-operator • "..." ")" 290 | "(" cast-expression fold-operator • "..." fold-operator cast-expression ")" "..." shift, and go to state 950
591 primary-expression → "(" expression ")" • $default reduce using rule 591 (primary-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 131 | "(" type-id ")" • cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 951 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
648 simple-capture → IDENTIFIER ELLIPSIS-opt • $default reduce using rule 648 (simple-capture)
5 ELLIPSIS-opt → • %empty [",", "]"] 6 | • "..." 649 simple-capture → "&" IDENTIFIER • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 952
350 init-capture → "&" ELLIPSIS-opt • IDENTIFIER initializer IDENTIFIER shift, and go to state 953
651 simple-capture → "*" "this" • $default reduce using rule 651 (simple-capture)
117 brace-or-equal-initializer → • "=" initializer-clause 118 | • braced-init-list 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 349 init-capture → ELLIPSIS-opt IDENTIFIER • initializer 362 initializer → • brace-or-equal-initializer 363 | • "(" expression-list ")" "=" shift, and go to state 396 "(" shift, and go to state 397 "{" shift, and go to state 398 brace-or-equal-initializer go to state 400 braced-init-list go to state 401 initializer go to state 954
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 124 capture → • simple-capture 125 | • init-capture 128 capture-list → • capture 129 | • capture-list "," capture 349 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 350 | • "&" ELLIPSIS-opt IDENTIFIER initializer 385 lambda-capture → capture-default "," • capture-list 648 simple-capture → • IDENTIFIER ELLIPSIS-opt 649 | • "&" IDENTIFIER ELLIPSIS-opt 650 | • "this" 651 | • "*" "this" "..." shift, and go to state 156 IDENTIFIER shift, and go to state 461 "this" shift, and go to state 462 "&" shift, and go to state 955 "*" shift, and go to state 465 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] ELLIPSIS-opt go to state 466 capture go to state 467 capture-list go to state 956 init-capture go to state 470 simple-capture go to state 473
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 124 capture → • simple-capture 125 | • init-capture 129 capture-list → capture-list "," • capture 349 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 350 | • "&" ELLIPSIS-opt IDENTIFIER initializer 648 simple-capture → • IDENTIFIER ELLIPSIS-opt 649 | • "&" IDENTIFIER ELLIPSIS-opt 650 | • "this" 651 | • "*" "this" "..." shift, and go to state 156 IDENTIFIER shift, and go to state 461 "this" shift, and go to state 462 "&" shift, and go to state 955 "*" shift, and go to state 465 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] ELLIPSIS-opt go to state 466 capture go to state 957 init-capture go to state 470 simple-capture go to state 473
392 lambda-introducer → "[" lambda-capture-opt "]" • $default reduce using rule 392 (lambda-introducer)
515 overloadable-operator → "(" ")" • $default reduce using rule 515 (overloadable-operator)
516 overloadable-operator → "[" "]" • $default reduce using rule 516 (overloadable-operator)
513 overloadable-operator → "delete" "[" • "]" "]" shift, and go to state 958
512 overloadable-operator → "new" "[" • "]" "]" shift, and go to state 959
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 171 conversion-function-id → • "operator" conversion-type-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 509 | "operator" overloadable-operator "<" • template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 695 template-argument → • constant-expression 696 | • type-id 697 | • id-expression 698 template-argument-list → • template-argument ELLIPSIS-opt 699 | • template-argument-list "," template-argument ELLIPSIS-opt 700 template-argument-list-opt → • %empty [">"] 701 | • template-argument-list 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] ">" reduce using rule 700 (template-argument-list-opt) "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-key go to state 424 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 425 conversion-function-id go to state 282 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 426 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 427 string-literal go to state 313 template-argument go to state 428 template-argument-list go to state 429 template-argument-list-opt go to state 960 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 431 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
403 literal-operator-id → "operator" string-literal IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 747 ud-suffix → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "," reduce using rule 403 (literal-operator-id) "," [reduce using rule 747 (ud-suffix)] "constexpr" reduce using rule 403 (literal-operator-id) "constexpr" [reduce using rule 747 (ud-suffix)] "..." reduce using rule 403 (literal-operator-id) "..." [reduce using rule 747 (ud-suffix)] "export" reduce using rule 403 (literal-operator-id) "export" [reduce using rule 747 (ud-suffix)] "extern" reduce using rule 403 (literal-operator-id) "extern" [reduce using rule 747 (ud-suffix)] IDENTIFIER reduce using rule 403 (literal-operator-id) IDENTIFIER [reduce using rule 747 (ud-suffix)] "inline" reduce using rule 403 (literal-operator-id) "inline" [reduce using rule 747 (ud-suffix)] "noexcept" reduce using rule 403 (literal-operator-id) "noexcept" [reduce using rule 747 (ud-suffix)] "::" reduce using rule 403 (literal-operator-id) "::" [reduce using rule 747 (ud-suffix)] "template" reduce using rule 403 (literal-operator-id) "template" [reduce using rule 747 (ud-suffix)] "typename" reduce using rule 403 (literal-operator-id) "typename" [reduce using rule 747 (ud-suffix)] "virtual" reduce using rule 403 (literal-operator-id) "virtual" [reduce using rule 747 (ud-suffix)] "+" reduce using rule 403 (literal-operator-id) "+" [reduce using rule 747 (ud-suffix)] "-" reduce using rule 403 (literal-operator-id) "-" [reduce using rule 747 (ud-suffix)] "using" reduce using rule 403 (literal-operator-id) "using" [reduce using rule 747 (ud-suffix)] "=" reduce using rule 403 (literal-operator-id) "=" [reduce using rule 747 (ud-suffix)] ";" reduce using rule 403 (literal-operator-id) ";" [reduce using rule 747 (ud-suffix)] "alignas" reduce using rule 403 (literal-operator-id) "alignas" [reduce using rule 747 (ud-suffix)] "(" reduce using rule 403 (literal-operator-id) "(" [reduce using rule 747 (ud-suffix)] ")" reduce using rule 403 (literal-operator-id) ")" [reduce using rule 747 (ud-suffix)] "&" reduce using rule 403 (literal-operator-id) "&" [reduce using rule 747 (ud-suffix)] "asm" reduce using rule 403 (literal-operator-id) "asm" [reduce using rule 747 (ud-suffix)] "*=" reduce using rule 403 (literal-operator-id) "*=" [reduce using rule 747 (ud-suffix)] "/=" reduce using rule 403 (literal-operator-id) "/=" [reduce using rule 747 (ud-suffix)] "%=" reduce using rule 403 (literal-operator-id) "%=" [reduce using rule 747 (ud-suffix)] "+=" reduce using rule 403 (literal-operator-id) "+=" [reduce using rule 747 (ud-suffix)] "-=" reduce using rule 403 (literal-operator-id) "-=" [reduce using rule 747 (ud-suffix)] ">>=" reduce using rule 403 (literal-operator-id) ">>=" [reduce using rule 747 (ud-suffix)] "<<=" reduce using rule 403 (literal-operator-id) "<<=" [reduce using rule 747 (ud-suffix)] "&=" reduce using rule 403 (literal-operator-id) "&=" [reduce using rule 747 (ud-suffix)] "^=" reduce using rule 403 (literal-operator-id) "^=" [reduce using rule 747 (ud-suffix)] "|=" reduce using rule 403 (literal-operator-id) "|=" [reduce using rule 747 (ud-suffix)] "[" reduce using rule 403 (literal-operator-id) "[" [reduce using rule 747 (ud-suffix)] "]" reduce using rule 403 (literal-operator-id) "]" [reduce using rule 747 (ud-suffix)] ":" reduce using rule 403 (literal-operator-id) ":" [reduce using rule 747 (ud-suffix)] "{" reduce using rule 403 (literal-operator-id) "{" [reduce using rule 747 (ud-suffix)] "}" reduce using rule 403 (literal-operator-id) "}" [reduce using rule 747 (ud-suffix)] "class" reduce using rule 403 (literal-operator-id) "class" [reduce using rule 747 (ud-suffix)] "struct" reduce using rule 403 (literal-operator-id) "struct" [reduce using rule 747 (ud-suffix)] "union" reduce using rule 403 (literal-operator-id) "union" [reduce using rule 747 (ud-suffix)] "final" reduce using rule 403 (literal-operator-id) "final" [reduce using rule 747 (ud-suffix)] "<=>" reduce using rule 403 (literal-operator-id) "<=>" [reduce using rule 747 (ud-suffix)] "concept" reduce using rule 403 (literal-operator-id) "concept" [reduce using rule 747 (ud-suffix)] "?" reduce using rule 403 (literal-operator-id) "?" [reduce using rule 747 (ud-suffix)] "&&" reduce using rule 403 (literal-operator-id) "&&" [reduce using rule 747 (ud-suffix)] "||" reduce using rule 403 (literal-operator-id) "||" [reduce using rule 747 (ud-suffix)] "operator" reduce using rule 403 (literal-operator-id) "operator" [reduce using rule 747 (ud-suffix)] "const" reduce using rule 403 (literal-operator-id) "const" [reduce using rule 747 (ud-suffix)] "volatile" reduce using rule 403 (literal-operator-id) "volatile" [reduce using rule 747 (ud-suffix)] "friend" reduce using rule 403 (literal-operator-id) "friend" [reduce using rule 747 (ud-suffix)] "typedef" reduce using rule 403 (literal-operator-id) "typedef" [reduce using rule 747 (ud-suffix)] "consteval" reduce using rule 403 (literal-operator-id) "consteval" [reduce using rule 747 (ud-suffix)] "constinit" reduce using rule 403 (literal-operator-id) "constinit" [reduce using rule 747 (ud-suffix)] "decltype" reduce using rule 403 (literal-operator-id) "decltype" [reduce using rule 747 (ud-suffix)] "->" reduce using rule 403 (literal-operator-id) "->" [reduce using rule 747 (ud-suffix)] "." reduce using rule 403 (literal-operator-id) "." [reduce using rule 747 (ud-suffix)] "enum" reduce using rule 403 (literal-operator-id) "enum" [reduce using rule 747 (ud-suffix)] "==" reduce using rule 403 (literal-operator-id) "==" [reduce using rule 747 (ud-suffix)] "!=" reduce using rule 403 (literal-operator-id) "!=" [reduce using rule 747 (ud-suffix)] "^" reduce using rule 403 (literal-operator-id) "^" [reduce using rule 747 (ud-suffix)] "<" reduce using rule 403 (literal-operator-id) "<" [reduce using rule 747 (ud-suffix)] ">" reduce using rule 403 (literal-operator-id) ">" [reduce using rule 747 (ud-suffix)] "explicit" reduce using rule 403 (literal-operator-id) "explicit" [reduce using rule 747 (ud-suffix)] "*" reduce using rule 403 (literal-operator-id) "*" [reduce using rule 747 (ud-suffix)] "/" reduce using rule 403 (literal-operator-id) "/" [reduce using rule 747 (ud-suffix)] "%" reduce using rule 403 (literal-operator-id) "%" [reduce using rule 747 (ud-suffix)] "|" reduce using rule 403 (literal-operator-id) "|" [reduce using rule 747 (ud-suffix)] "<<" reduce using rule 403 (literal-operator-id) "<<" [reduce using rule 747 (ud-suffix)] ">>" reduce using rule 403 (literal-operator-id) ">>" [reduce using rule 747 (ud-suffix)] "<=" reduce using rule 403 (literal-operator-id) "<=" [reduce using rule 747 (ud-suffix)] ">=" reduce using rule 403 (literal-operator-id) ">=" [reduce using rule 747 (ud-suffix)] ".*" reduce using rule 403 (literal-operator-id) ".*" [reduce using rule 747 (ud-suffix)] "->*" reduce using rule 403 (literal-operator-id) "->*" [reduce using rule 747 (ud-suffix)] "try" reduce using rule 403 (literal-operator-id) "try" [reduce using rule 747 (ud-suffix)] "import" reduce using rule 403 (literal-operator-id) "import" [reduce using rule 747 (ud-suffix)] "namespace" reduce using rule 403 (literal-operator-id) "namespace" [reduce using rule 747 (ud-suffix)] "requires" reduce using rule 403 (literal-operator-id) "requires" [reduce using rule 747 (ud-suffix)] "~" reduce using rule 403 (literal-operator-id) "~" [reduce using rule 747 (ud-suffix)] "++" reduce using rule 403 (literal-operator-id) "++" [reduce using rule 747 (ud-suffix)] "--" reduce using rule 403 (literal-operator-id) "--" [reduce using rule 747 (ud-suffix)] "auto" reduce using rule 403 (literal-operator-id) "auto" [reduce using rule 747 (ud-suffix)] "char" reduce using rule 403 (literal-operator-id) "char" [reduce using rule 747 (ud-suffix)] "char8_t" reduce using rule 403 (literal-operator-id) "char8_t" [reduce using rule 747 (ud-suffix)] "char16_t" reduce using rule 403 (literal-operator-id) "char16_t" [reduce using rule 747 (ud-suffix)] "char32_t" reduce using rule 403 (literal-operator-id) "char32_t" [reduce using rule 747 (ud-suffix)] "wchar_t" reduce using rule 403 (literal-operator-id) "wchar_t" [reduce using rule 747 (ud-suffix)] "bool" reduce using rule 403 (literal-operator-id) "bool" [reduce using rule 747 (ud-suffix)] "short" reduce using rule 403 (literal-operator-id) "short" [reduce using rule 747 (ud-suffix)] "int" reduce using rule 403 (literal-operator-id) "int" [reduce using rule 747 (ud-suffix)] "long" reduce using rule 403 (literal-operator-id) "long" [reduce using rule 747 (ud-suffix)] "signed" reduce using rule 403 (literal-operator-id) "signed" [reduce using rule 747 (ud-suffix)] "unsigned" reduce using rule 403 (literal-operator-id) "unsigned" [reduce using rule 747 (ud-suffix)] "float" reduce using rule 403 (literal-operator-id) "float" [reduce using rule 747 (ud-suffix)] "double" reduce using rule 403 (literal-operator-id) "double" [reduce using rule 747 (ud-suffix)] "void" reduce using rule 403 (literal-operator-id) "void" [reduce using rule 747 (ud-suffix)] "static_assert" reduce using rule 403 (literal-operator-id) "static_assert" [reduce using rule 747 (ud-suffix)] "static" reduce using rule 403 (literal-operator-id) "static" [reduce using rule 747 (ud-suffix)] "thread_local" reduce using rule 403 (literal-operator-id) "thread_local" [reduce using rule 747 (ud-suffix)] "mutable" reduce using rule 403 (literal-operator-id) "mutable" [reduce using rule 747 (ud-suffix)] "override" reduce using rule 403 (literal-operator-id) "override" [reduce using rule 747 (ud-suffix)] $default reduce using rule 403 (literal-operator-id)
170 conversion-declarator-opt → conversion-declarator • $default reduce using rule 170 (conversion-declarator-opt)
172 conversion-type-id → type-specifier-seq conversion-declarator-opt • $default reduce using rule 172 (conversion-type-id)
139 class-name → • IDENTIFIER 140 | • simple-template-id 168 conversion-declarator → • ptr-operator conversion-declarator-opt 168 | ptr-operator • conversion-declarator-opt 169 conversion-declarator-opt → • %empty [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] 170 | • conversion-declarator 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 169 (conversion-declarator-opt)] "::" [reduce using rule 169 (conversion-declarator-opt)] "&" [reduce using rule 169 (conversion-declarator-opt)] "&&" [reduce using rule 169 (conversion-declarator-opt)] "decltype" [reduce using rule 169 (conversion-declarator-opt)] "*" [reduce using rule 169 (conversion-declarator-opt)] $default reduce using rule 169 (conversion-declarator-opt) class-name go to state 55 conversion-declarator go to state 779 conversion-declarator-opt go to state 961 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 ptr-operator go to state 781 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
628 requirement-parameter-list → "(" parameter-declaration-clause • ")" ")" shift, and go to state 962
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 150 compound-requirement → • "{" expression "}" NOEXCEPT-opt return-type-requirement-opt ";" 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 472 nested-requirement → • "requires" constraint-expression ";" 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 623 requirement → • simple-requirement 624 | • type-requirement 625 | • compound-requirement 626 | • nested-requirement 627 requirement-body → "{" • requirement-seq "}" 631 requirement-seq → • requirement 632 | • requirement-seq requirement 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 655 simple-requirement → • expression ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 736 type-requirement → • "typename" nested-name-specifier-opt type-name ";" 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 963 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 964 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 965 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 compound-requirement go to state 966 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 967 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 nested-requirement go to state 968 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requirement go to state 969 requirement-seq go to state 970 requires-expression go to state 309 shift-expression go to state 310 simple-requirement go to state 971 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-requirement go to state 972 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
636 requires-expression → "requires" requirement-parameter-list-opt requirement-body • $default reduce using rule 636 (requires-expression)
582 postfix-expression → "dynamic_cast" "<" type-id • ">" "(" expression ")" ">" shift, and go to state 973
583 postfix-expression → "static_cast" "<" type-id • ">" "(" expression ")" ">" shift, and go to state 974
584 postfix-expression → "reinterpret_cast" "<" type-id • ">" "(" expression ")" ">" shift, and go to state 975
585 postfix-expression → "const_cast" "<" type-id • ">" "(" expression ")" ">" shift, and go to state 976
280 expression → expression • "," assignment-expression 586 postfix-expression → "typeid" "(" expression • ")" "," shift, and go to state 552 ")" shift, and go to state 977
587 postfix-expression → "typeid" "(" type-id • ")" ")" shift, and go to state 978
755 unary-expression → "sizeof" "..." "(" • IDENTIFIER ")" IDENTIFIER shift, and go to state 979
754 unary-expression → "sizeof" "(" type-id • ")" ")" shift, and go to state 980
756 unary-expression → "alignof" "(" type-id • ")" ")" shift, and go to state 981
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 124 capture → • simple-capture 125 | • init-capture 126 capture-default → • "&" 127 | • "=" 128 capture-list → • capture 129 | • capture-list "," capture 225 delete-expression → SCOPE-opt "delete" "[" • "]" cast-expression 349 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 350 | • "&" ELLIPSIS-opt IDENTIFIER initializer 383 lambda-capture → • capture-default 384 | • capture-list 385 | • capture-default "," capture-list 386 lambda-capture-opt → • %empty ["]"] 387 | • lambda-capture 392 lambda-introducer → "[" • lambda-capture-opt "]" 648 simple-capture → • IDENTIFIER ELLIPSIS-opt 649 | • "&" IDENTIFIER ELLIPSIS-opt 650 | • "this" 651 | • "*" "this" "..." shift, and go to state 156 IDENTIFIER shift, and go to state 461 "this" shift, and go to state 462 "=" shift, and go to state 463 "&" shift, and go to state 464 "]" shift, and go to state 982 "*" shift, and go to state 465 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "]" [reduce using rule 386 (lambda-capture-opt)] ELLIPSIS-opt go to state 466 capture go to state 467 capture-default go to state 468 capture-list go to state 469 init-capture go to state 470 lambda-capture go to state 471 lambda-capture-opt go to state 472 simple-capture go to state 473
224 delete-expression → SCOPE-opt "delete" cast-expression • $default reduce using rule 224 (delete-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 281 expression-list → • initializer-list 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 364 initializer-clause → • assignment-expression 365 | • braced-init-list 366 initializer-list → • initializer-clause ELLIPSIS-opt 367 | • initializer-list "," initializer-clause ELLIPSIS-opt 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 483 new-placement → "(" • expression-list ")" 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression-list go to state 983 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 666 initializer-list go to state 667 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
485 new-placement-opt → new-placement • $default reduce using rule 485 (new-placement-opt)
136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → SCOPE-opt "new" new-placement-opt • new-type-id new-initializer-opt 478 | SCOPE-opt "new" new-placement-opt • "(" type-id ")" new-initializer-opt 486 new-type-id → • type-specifier-seq new-declarator-opt 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "(" shift, and go to state 984 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) class-key go to state 424 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 new-type-id go to state 985 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 986 typedef-name go to state 108 typename-specifier go to state 109
42 additive-expression → additive-expression "+" multiplicative-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] 451 multiplicative-expression → multiplicative-expression • "*" pm-expression 452 | multiplicative-expression • "/" pm-expression 453 | multiplicative-expression • "%" pm-expression "*" shift, and go to state 577 "/" shift, and go to state 578 "%" shift, and go to state 579 $default reduce using rule 42 (additive-expression)
43 additive-expression → additive-expression "-" multiplicative-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] 451 multiplicative-expression → multiplicative-expression • "*" pm-expression 452 | multiplicative-expression • "/" pm-expression 453 | multiplicative-expression • "%" pm-expression "*" shift, and go to state 577 "/" shift, and go to state 578 "%" shift, and go to state 579 $default reduce using rule 43 (additive-expression)
48 and-expression → and-expression "&" equality-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "^", ">", "|"] 259 equality-expression → equality-expression • "==" relational-expression 260 | equality-expression • "!=" relational-expression "==" shift, and go to state 549 "!=" shift, and go to state 550 $default reduce using rule 48 (and-expression)
149 compare-expression → compare-expression "<=>" shift-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] 646 shift-expression → shift-expression • "<<" additive-expression 647 | shift-expression • ">>" additive-expression "<<" shift, and go to state 594 ">>" shift, and go to state 595 $default reduce using rule 149 (compare-expression)
259 equality-expression → equality-expression "==" relational-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "|"] 619 relational-expression → relational-expression • "<" compare-expression 620 | relational-expression • ">" compare-expression 621 | relational-expression • "<=" compare-expression 622 | relational-expression • ">=" compare-expression "<" shift, and go to state 590 ">" shift, and go to state 591 "<=" shift, and go to state 592 ">=" shift, and go to state 593 $default reduce using rule 259 (equality-expression) Conflict between rule 259 and token ">" resolved as shift ("==" < ">").
260 equality-expression → equality-expression "!=" relational-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "|"] 619 relational-expression → relational-expression • "<" compare-expression 620 | relational-expression • ">" compare-expression 621 | relational-expression • "<=" compare-expression 622 | relational-expression • ">=" compare-expression "<" shift, and go to state 590 ">" shift, and go to state 591 "<=" shift, and go to state 592 ">=" shift, and go to state 593 $default reduce using rule 260 (equality-expression) Conflict between rule 260 and token ">" resolved as shift ("!=" < ">").
48 and-expression → and-expression • "&" equality-expression 265 exclusive-or-expression → exclusive-or-expression "^" and-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "^", ">", "|"] "&" shift, and go to state 547 $default reduce using rule 265 (exclusive-or-expression)
280 expression → expression "," assignment-expression • $default reduce using rule 280 (expression)
265 exclusive-or-expression → exclusive-or-expression • "^" and-expression 348 inclusive-or-expression → inclusive-or-expression "|" exclusive-or-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", ">", "|"] "^" shift, and go to state 551 $default reduce using rule 348 (inclusive-or-expression)
389 lambda-declarator → "(" parameter-declaration-clause • ")" lambda-specifiers requires-clause-opt ")" shift, and go to state 987
391 lambda-expression → lambda-introducer "<" template-parameter-list • ">" requires-clause-opt lambda-declarator compound-statement 712 template-parameter-list → template-parameter-list • "," template-parameter "," shift, and go to state 443 ">" shift, and go to state 988
489 noexcept-specifier → "noexcept" • "(" constant-expression ")" 490 | "noexcept" • [",", "...", "=", ";", "alignas", "(", ")", "[", ":", "{", "final", "->", ">", "try", "requires", "override"] "(" shift, and go to state 989 "(" [reduce using rule 490 (noexcept-specifier)] $default reduce using rule 490 (noexcept-specifier)
492 noexcept-specifier-opt → noexcept-specifier • $default reduce using rule 492 (noexcept-specifier-opt)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 393 lambda-specifiers → decl-specifier-seq-opt noexcept-specifier-opt • attribute-specifier-seq-opt trailing-return-type-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 990
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 151 compound-statement → "{" • statement-seq-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 212 declaration-statement → • block-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 380 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 381 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 382 | • attribute-specifier-seq-opt "default" ":" statement 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 676 statement → • labeled-statement 677 | • attribute-specifier-seq-opt expression-statement 678 | • attribute-specifier-seq-opt compound-statement 679 | • attribute-specifier-seq-opt selection-statement 680 | • attribute-specifier-seq-opt iteration-statement 681 | • attribute-specifier-seq-opt jump-statement 682 | • declaration-statement 683 | • attribute-specifier-seq-opt try-block 684 statement-seq → • statement 685 | • statement-seq statement 686 statement-seq-opt → • %empty ["}"] 687 | • statement-seq 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 991 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 686 (statement-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 993 block-declaration go to state 994 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 995 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 996 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 997 statement-seq go to state 998 statement-seq-opt go to state 999 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
390 lambda-expression → lambda-introducer lambda-declarator compound-statement • $default reduce using rule 390 (lambda-expression)
707 template-id → literal-operator-id "<" template-argument-list-opt • ">" ">" shift, and go to state 1000
348 inclusive-or-expression → inclusive-or-expression • "|" exclusive-or-expression 406 logical-and-expression → logical-and-expression "&&" inclusive-or-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", ">"] "|" shift, and go to state 554 $default reduce using rule 406 (logical-and-expression)
159 conditional-expression → logical-or-expression "?" expression • ":" assignment-expression 280 expression → expression • "," assignment-expression "," shift, and go to state 552 ":" shift, and go to state 1001
406 logical-and-expression → logical-and-expression • "&&" inclusive-or-expression 408 logical-or-expression → logical-or-expression "||" logical-and-expression • [",", "...", "=", ";", ")", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "||", ">"] "&&" shift, and go to state 562 $default reduce using rule 408 (logical-or-expression)
53 assignment-expression → logical-or-expression assignment-operator initializer-clause • $default reduce using rule 53 (assignment-expression)
451 multiplicative-expression → multiplicative-expression "*" pm-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">="] 568 pm-expression → pm-expression • ".*" cast-expression 569 | pm-expression • "->*" cast-expression ".*" shift, and go to state 582 "->*" shift, and go to state 583 $default reduce using rule 451 (multiplicative-expression)
452 multiplicative-expression → multiplicative-expression "/" pm-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">="] 568 pm-expression → pm-expression • ".*" cast-expression 569 | pm-expression • "->*" cast-expression ".*" shift, and go to state 582 "->*" shift, and go to state 583 $default reduce using rule 452 (multiplicative-expression)
453 multiplicative-expression → multiplicative-expression "%" pm-expression • [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">="] 568 pm-expression → pm-expression • ".*" cast-expression 569 | pm-expression • "->*" cast-expression ".*" shift, and go to state 582 "->*" shift, and go to state 583 $default reduce using rule 453 (multiplicative-expression)
708 template-name → IDENTIFIER • ["<"] 767 unqualified-id → IDENTIFIER • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "<" reduce using rule 708 (template-name) "<" [reduce using rule 767 (unqualified-id)] $default reduce using rule 767 (unqualified-id)
468 nested-name-specifier → nested-name-specifier TEMPLATE-opt simple-template-id • "::" 705 template-id → simple-template-id • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "+", "-", "using", "=", ";", "alignas", "(", ")", "&", "asm", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "class", "struct", "union", "final", "<=>", "concept", "?", "&&", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", ".", "enum", "==", "!=", "^", "<", ">", "explicit", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "try", "import", "namespace", "requires", "~", "++", "--", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", "override"] "::" shift, and go to state 693 "::" [reduce using rule 705 (template-id)] $default reduce using rule 705 (template-id)
612 qualified-id → nested-name-specifier TEMPLATE-opt unqualified-id • $default reduce using rule 612 (qualified-id)
706 template-id → operator-function-id "<" template-argument-list-opt • ">" ">" shift, and go to state 1002
568 pm-expression → pm-expression ".*" cast-expression • $default reduce using rule 568 (pm-expression)
569 pm-expression → pm-expression "->*" cast-expression • $default reduce using rule 569 (pm-expression)
283 expression-list-opt → expression-list • $default reduce using rule 283 (expression-list-opt)
573 postfix-expression → postfix-expression "(" expression-list-opt • ")" ")" shift, and go to state 1003
572 postfix-expression → postfix-expression "[" expression-list-opt • "]" "]" shift, and go to state 1004
139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 343 id-expression → • unqualified-id 344 | • qualified-id 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 579 postfix-expression → postfix-expression "->" TEMPLATE-opt • id-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id IDENTIFIER shift, and go to state 238 "::" shift, and go to state 6 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 "~" shift, and go to state 354 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 121 enum-name go to state 71 id-expression go to state 1005 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 356 operator-function-id go to state 302 qualified-id go to state 307 simple-template-id go to state 311 template-id go to state 314 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 319
139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 343 id-expression → • unqualified-id 344 | • qualified-id 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 578 postfix-expression → postfix-expression "." TEMPLATE-opt • id-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id IDENTIFIER shift, and go to state 238 "::" shift, and go to state 6 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 "~" shift, and go to state 354 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 121 enum-name go to state 71 id-expression go to state 1006 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 356 operator-function-id go to state 302 qualified-id go to state 307 simple-template-id go to state 311 template-id go to state 314 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 319
149 compare-expression → compare-expression • "<=>" shift-expression 619 relational-expression → relational-expression "<" compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 548 $default reduce using rule 619 (relational-expression)
149 compare-expression → compare-expression • "<=>" shift-expression 620 relational-expression → relational-expression ">" compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 548 $default reduce using rule 620 (relational-expression)
149 compare-expression → compare-expression • "<=>" shift-expression 621 relational-expression → relational-expression "<=" compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 548 $default reduce using rule 621 (relational-expression)
149 compare-expression → compare-expression • "<=>" shift-expression 622 relational-expression → relational-expression ">=" compare-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<=", ">="] "<=>" shift, and go to state 548 $default reduce using rule 622 (relational-expression)
42 additive-expression → additive-expression • "+" multiplicative-expression 43 | additive-expression • "-" multiplicative-expression 646 shift-expression → shift-expression "<<" additive-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] "+" shift, and go to state 545 "-" shift, and go to state 546 $default reduce using rule 646 (shift-expression)
42 additive-expression → additive-expression • "+" multiplicative-expression 43 | additive-expression • "-" multiplicative-expression 647 shift-expression → shift-expression ">>" additive-expression • [",", "...", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "|", "<<", ">>", "<=", ">="] "+" shift, and go to state 545 "-" shift, and go to state 546 $default reduce using rule 647 (shift-expression)
574 postfix-expression → simple-type-specifier "(" expression-list-opt • ")" ")" shift, and go to state 1007
575 postfix-expression → typename-specifier "(" expression-list-opt • ")" ")" shift, and go to state 1008
455 namespace-alias → IDENTIFIER • [";"] 461 namespace-name → IDENTIFIER • [";"] ";" reduce using rule 455 (namespace-alias) ";" [reduce using rule 461 (namespace-name)] $default reduce using rule 455 (namespace-alias)
613 qualified-namespace-specifier → nested-name-specifier-opt namespace-name • $default reduce using rule 613 (qualified-namespace-specifier)
456 namespace-alias-definition → "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" • $default reduce using rule 456 (namespace-alias-definition)
237 enclosing-namespace-specifier → enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER • ["::"] 471 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER • "{" namespace-body "}" "{" shift, and go to state 1009 $default reduce using rule 237 (enclosing-namespace-specifier)
689 static_assert-declaration → "static_assert" "(" constant-expression "," string-literal • ")" ";" ")" shift, and go to state 1010
688 static_assert-declaration → "static_assert" "(" constant-expression ")" ";" • $default reduce using rule 688 (static_assert-declaration)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 208 declaration-seq → • declaration 209 | • declaration-seq declaration 210 declaration-seq-opt → • %empty ["}"] 211 | • declaration-seq 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 273 | • "export" "{" declaration-seq-opt "}" 274 | • "export" module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 395 | • "extern" string-literal declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 454 | INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" • namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 457 namespace-body → • declaration-seq-opt 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 210 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 849 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-body go to state 1011 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
457 namespace-body → declaration-seq-opt • $default reduce using rule 457 (namespace-body)
766 unnamed-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body • "}" "}" shift, and go to state 1012
786 using-directive → attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name • ";" ";" shift, and go to state 1013
46 alignment-specifier → "alignas" "(" constant-expression ELLIPSIS-opt • ")" ")" shift, and go to state 1014
45 alignment-specifier → "alignas" "(" type-id ELLIPSIS-opt • ")" ")" shift, and go to state 1015
49 asm-declaration → attribute-specifier-seq-opt "asm" "(" string-literal ")" • ";" ";" shift, and go to state 1016
76 attribute-namespace → IDENTIFIER • $default reduce using rule 76 (attribute-namespace)
87 attribute-using-prefix → "using" attribute-namespace • ":" ":" shift, and go to state 1017
76 attribute-namespace → IDENTIFIER • ["::"] 85 attribute-token → IDENTIFIER • [",", "...", "(", "]"] "::" reduce using rule 76 (attribute-namespace) $default reduce using rule 85 (attribute-token)
74 attribute-list → attribute • "..." 78 attribute-opt → attribute • [",", "]"] "..." shift, and go to state 1018 $default reduce using rule 78 (attribute-opt)
73 attribute-list → attribute-list • "," attribute-opt 75 | attribute-list • "," attribute "..." 80 attribute-specifier → "[" "[" attribute-using-prefix-opt attribute-list • "]" "]" "," shift, and go to state 1019 "]" shift, and go to state 1020
79 attribute-scoped-token → attribute-namespace • "::" IDENTIFIER "::" shift, and go to state 1021
72 attribute-list → attribute-opt • $default reduce using rule 72 (attribute-list)
86 attribute-token → attribute-scoped-token • $default reduce using rule 86 (attribute-token)
67 attribute → attribute-token • attribute-argument-clause-opt 68 attribute-argument-clause → • "(" balanced-token-seq-opt ")" 69 attribute-argument-clause-opt → • %empty [",", "...", "]"] 70 | • attribute-argument-clause "(" shift, and go to state 1022 $default reduce using rule 69 (attribute-argument-clause-opt) attribute-argument-clause go to state 1023 attribute-argument-clause-opt go to state 1024
179 cv-qualifier-seq → cv-qualifier cv-qualifier-seq-opt • $default reduce using rule 179 (cv-qualifier-seq)
345 identifier-list → IDENTIFIER • $default reduce using rule 345 (identifier-list)
346 identifier-list → identifier-list • "," IDENTIFIER 654 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list • "]" initializer ";" "," shift, and go to state 1025 "]" shift, and go to state 1026
328 function-body → "=" • "default" ";" 329 | "=" • "delete" ";" "delete" shift, and go to state 1027 "default" shift, and go to state 1028
139 class-name → • IDENTIFIER 140 | • simple-template-id 141 class-or-decltype → • nested-name-specifier-opt type-name 142 | • nested-name-specifier "template" simple-template-id 143 | • decltype-specifier 174 ctor-initializer → ":" • mem-initializer-list 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 409 mem-initializer → • mem-initializer-id "(" expression-list-opt ")" 410 | • mem-initializer-id braced-init-list 411 mem-initializer-id → • class-or-decltype 412 | • IDENTIFIER 413 mem-initializer-list → • mem-initializer ELLIPSIS-opt 414 | • mem-initializer-list "," mem-initializer ELLIPSIS-opt 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 1029 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] class-name go to state 55 class-or-decltype go to state 1030 decltype-specifier go to state 893 enum-name go to state 71 mem-initializer go to state 1031 mem-initializer-id go to state 1032 mem-initializer-list go to state 1033 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 894 nested-name-specifier-opt go to state 895 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
174 ctor-initializer → • ":" mem-initializer-list 175 ctor-initializer-opt → • %empty ["{"] 176 | • ctor-initializer 334 function-try-block → "try" • ctor-initializer-opt compound-statement handler-seq ":" shift, and go to state 868 $default reduce using rule 175 (ctor-initializer-opt) ctor-initializer go to state 870 ctor-initializer-opt go to state 1034
176 ctor-initializer-opt → ctor-initializer • $default reduce using rule 176 (ctor-initializer-opt)
151 compound-statement → • "{" statement-seq-opt "}" 326 function-body → ctor-initializer-opt • compound-statement "{" shift, and go to state 813 compound-statement go to state 1035
331 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body • $default reduce using rule 331 (function-definition)
327 function-body → function-try-block • $default reduce using rule 327 (function-body)
791 virt-specifier-seq → virt-specifier-seq virt-specifier • $default reduce using rule 791 (virt-specifier-seq)
330 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body • $default reduce using rule 330 (function-definition)
608 ptr-operator → nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt • $default reduce using rule 608 (ptr-operator)
177 cv-qualifier → • "const" 178 | • "volatile" 179 cv-qualifier-seq → • cv-qualifier cv-qualifier-seq-opt 180 cv-qualifier-seq-opt → • %empty [",", "...", "noexcept", "=", ";", "alignas", "(", ")", "&", "[", ":", "{", "final", "&&", "->", ">", "try", "requires", "override"] 181 | • cv-qualifier-seq 564 parameters-and-qualifiers → "(" parameter-declaration-clause ")" • cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "const" shift, and go to state 15 "volatile" shift, and go to state 16 $default reduce using rule 180 (cv-qualifier-seq-opt) cv-qualifier go to state 628 cv-qualifier-seq go to state 629 cv-qualifier-seq-opt go to state 1036
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 554 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 555 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 556 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 557 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 559 parameter-declaration-clause → parameter-declaration-list "," • "..." 561 parameter-declaration-list → parameter-declaration-list "," • parameter-declaration "..." shift, and go to state 1037 $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 parameter-declaration go to state 1038
558 parameter-declaration-clause → parameter-declaration-list-opt ELLIPSIS-opt • $default reduce using rule 558 (parameter-declaration-clause)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 503 noptr-declarator → noptr-declarator "[" constant-expression-opt "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1039
714 trailing-return-type → "->" type-id • $default reduce using rule 714 (trailing-return-type)
435 member-specification → access-specifier ":" member-specification-opt • $default reduce using rule 435 (member-specification)
12 IDENTIFIER-opt → IDENTIFIER • ["alignas", "[", ":"] 139 class-name → IDENTIFIER • ["::"] 248 enum-name → IDENTIFIER • ["::"] 455 namespace-alias → IDENTIFIER • ["::"] 461 namespace-name → IDENTIFIER • ["::"] 708 template-name → IDENTIFIER • ["<"] 743 typedef-name → IDENTIFIER • ["::"] "::" reduce using rule 139 (class-name) "::" [reduce using rule 248 (enum-name)] "::" [reduce using rule 455 (namespace-alias)] "::" [reduce using rule 461 (namespace-name)] "::" [reduce using rule 743 (typedef-name)] "<" reduce using rule 708 (template-name) $default reduce using rule 12 (IDENTIFIER-opt)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 429 member-declarator → IDENTIFIER-opt • attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1040
117 brace-or-equal-initializer → • "=" initializer-clause 118 | • braced-init-list 119 brace-or-equal-initializer-opt → • %empty [",", ";"] 120 | • brace-or-equal-initializer 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 330 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator • virt-specifier-seq-opt function-body 331 | attribute-specifier-seq-opt decl-specifier-seq-opt declarator • requires-clause function-body 426 member-declarator → declarator • virt-specifier-seq-opt pure-specifier-opt 427 | declarator • requires-clause 428 | declarator • brace-or-equal-initializer-opt 633 requires-clause → • "requires" constraint-logical-or-expression 788 virt-specifier → • "override" 789 | • "final" 790 virt-specifier-seq → • virt-specifier 791 | • virt-specifier-seq virt-specifier 792 virt-specifier-seq-opt → • %empty [",", "=", ";", ":", "{", "try"] 793 | • virt-specifier-seq "=" shift, and go to state 396 "{" shift, and go to state 398 "final" shift, and go to state 632 "requires" shift, and go to state 399 "override" shift, and go to state 633 "," reduce using rule 119 (brace-or-equal-initializer-opt) "," [reduce using rule 792 (virt-specifier-seq-opt)] "=" [reduce using rule 792 (virt-specifier-seq-opt)] ";" reduce using rule 119 (brace-or-equal-initializer-opt) ";" [reduce using rule 792 (virt-specifier-seq-opt)] ":" reduce using rule 792 (virt-specifier-seq-opt) "{" [reduce using rule 792 (virt-specifier-seq-opt)] "try" reduce using rule 792 (virt-specifier-seq-opt) $default reduce using rule 119 (brace-or-equal-initializer-opt) brace-or-equal-initializer go to state 1041 brace-or-equal-initializer-opt go to state 1042 braced-init-list go to state 401 requires-clause go to state 1043 virt-specifier go to state 635 virt-specifier-seq go to state 636 virt-specifier-seq-opt go to state 1044
430 member-declarator-list → member-declarator • $default reduce using rule 430 (member-declarator-list)
431 member-declarator-list → member-declarator-list • "," member-declarator 433 member-declarator-list-opt → member-declarator-list • [";"] "," shift, and go to state 1045 $default reduce using rule 433 (member-declarator-list-opt)
415 member-declaration → attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt • ";" ";" shift, and go to state 1046
238 enum-base → • ":" type-specifier-seq 239 enum-base-opt → • %empty [";"] 240 | • enum-base 507 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name • enum-base-opt ";" ":" shift, and go to state 683 $default reduce using rule 239 (enum-base-opt) enum-base go to state 684 enum-base-opt go to state 685
36 access-specifier → • "private" 37 | • "protected" 38 | • "public" 39 access-specifier-opt → • %empty [IDENTIFIER, "::", "decltype"] 40 | • access-specifier 103 base-specifier → attribute-specifier-seq-opt "virtual" • access-specifier-opt class-or-decltype "private" shift, and go to state 369 "protected" shift, and go to state 370 "public" shift, and go to state 371 $default reduce using rule 39 (access-specifier-opt) access-specifier go to state 1047 access-specifier-opt go to state 1048
27 VIRTUAL-opt → • %empty [IDENTIFIER, "::", "decltype"] 28 | • "virtual" 104 base-specifier → attribute-specifier-seq-opt access-specifier • VIRTUAL-opt class-or-decltype "virtual" shift, and go to state 1049 $default reduce using rule 27 (VIRTUAL-opt) VIRTUAL-opt go to state 1050
102 base-specifier → attribute-specifier-seq-opt class-or-decltype • $default reduce using rule 102 (base-specifier)
143 class-or-decltype → decltype-specifier • [",", "...", "(", "{"] 466 nested-name-specifier → decltype-specifier • "::" "::" shift, and go to state 189 $default reduce using rule 143 (class-or-decltype)
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 142 class-or-decltype → nested-name-specifier • "template" simple-template-id 467 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 468 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 470 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] IDENTIFIER shift, and go to state 198 "template" shift, and go to state 1051 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 470 (nested-name-specifier-opt)] TEMPLATE-opt go to state 200
139 class-name → • IDENTIFIER 140 | • simple-template-id 141 class-or-decltype → nested-name-specifier-opt • type-name 248 enum-name → • IDENTIFIER 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 525 class-name go to state 55 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 102 type-name go to state 1052 typedef-name go to state 108
105 base-specifier-list → base-specifier ELLIPSIS-opt • $default reduce using rule 105 (base-specifier-list)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 102 base-specifier → • attribute-specifier-seq-opt class-or-decltype 103 | • attribute-specifier-seq-opt "virtual" access-specifier-opt class-or-decltype 104 | • attribute-specifier-seq-opt access-specifier VIRTUAL-opt class-or-decltype 106 base-specifier-list → base-specifier-list "," • base-specifier ELLIPSIS-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 652 base-specifier go to state 1053
133 class-head → class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt • $default reduce using rule 133 (class-head)
363 initializer → "(" expression-list ")" • $default reduce using rule 363 (initializer)
366 initializer-list → initializer-clause ELLIPSIS-opt • $default reduce using rule 366 (initializer-list)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 364 initializer-clause → • assignment-expression 365 | • braced-init-list 367 initializer-list → initializer-list "," • initializer-clause ELLIPSIS-opt 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 1054 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
229 designator → "." IDENTIFIER • $default reduce using rule 229 (designator)
2 COMMA-opt → "," • ["}"] 226 designated-initializer-clause → • designator brace-or-equal-initializer 228 designated-initializer-list → designated-initializer-list "," • designated-initializer-clause 229 designator → • "." IDENTIFIER "." shift, and go to state 669 $default reduce using rule 2 (COMMA-opt) designated-initializer-clause go to state 1055 designator go to state 672
122 braced-init-list → "{" designated-initializer-list COMMA-opt • "}" "}" shift, and go to state 1056
226 designated-initializer-clause → designator brace-or-equal-initializer • $default reduce using rule 226 (designated-initializer-clause)
2 COMMA-opt → "," • ["}"] 19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 364 initializer-clause → • assignment-expression 365 | • braced-init-list 367 initializer-list → initializer-list "," • initializer-clause ELLIPSIS-opt 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "}" reduce using rule 2 (COMMA-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 1054 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
121 braced-init-list → "{" initializer-list COMMA-opt • "}" "}" shift, and go to state 1057
116 boolean-literal → • BOOLEAN_LITERAL 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 165 constraint-logical-and-expression → constraint-logical-and-expression "&&" • primary-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 570 pointer-literal → • POINTER_LITERAL 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "::" shift, and go to state 6 "this" shift, and go to state 242 "(" shift, and go to state 674 "[" shift, and go to state 247 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 354 POINTER_LITERAL shift, and go to state 259 STRING_LITERAL shift, and go to state 118 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 boolean-literal go to state 277 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 121 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 356 operator-function-id go to state 302 pointer-literal go to state 304 primary-expression go to state 1058 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
116 boolean-literal → • BOOLEAN_LITERAL 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 164 constraint-logical-and-expression → • primary-expression 165 | • constraint-logical-and-expression "&&" primary-expression 167 constraint-logical-or-expression → constraint-logical-or-expression "||" • constraint-logical-and-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 570 pointer-literal → • POINTER_LITERAL 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "::" shift, and go to state 6 "this" shift, and go to state 242 "(" shift, and go to state 674 "[" shift, and go to state 247 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 354 POINTER_LITERAL shift, and go to state 259 STRING_LITERAL shift, and go to state 118 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 boolean-literal go to state 277 character-literal go to state 279 class-name go to state 55 constraint-logical-and-expression go to state 1059 conversion-function-id go to state 282 decltype-specifier go to state 121 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 356 operator-function-id go to state 302 pointer-literal go to state 304 primary-expression go to state 677 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
253 enumerator-definition → enumerator "=" constant-expression • $default reduce using rule 253 (enumerator-definition)
250 enum-specifier → enum-head "{" enumerator-list "," "}" • $default reduce using rule 250 (enum-specifier)
255 enumerator-list → enumerator-list "," enumerator-definition • $default reduce using rule 255 (enumerator-list)
238 enum-base → ":" type-specifier-seq • $default reduce using rule 238 (enum-base)
507 opaque-enum-declaration → enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" • $default reduce using rule 507 (opaque-enum-declaration)
217 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" • "->" simple-template-id ";" "->" shift, and go to state 1060
449 module-partition-opt → module-partition • $default reduce using rule 449 (module-partition-opt)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 438 module-declaration → EXPORT-opt "module" module-name module-partition-opt • attribute-specifier-seq-opt ";" $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1061
596 private-module-fragment → "module" ":" • "private" ";" declaration-seq-opt "private" shift, and go to state 1062
721 type-constraint → nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" • $default reduce using rule 721 (type-constraint)
152 concept-definition → "concept" concept-name "=" constraint-expression • ";" ";" shift, and go to state 1063
163 constraint-expression → logical-or-expression • [";"] 408 logical-or-expression → logical-or-expression • "||" logical-and-expression "||" shift, and go to state 575 $default reduce using rule 163 (constraint-expression)
231 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt • IDENTIFIER IDENTIFIER shift, and go to state 1064
5 ELLIPSIS-opt → • %empty [",", ">"] 6 | • "..." 699 template-argument-list → template-argument-list "," template-argument • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1065
493 noptr-abstract-declarator → noptr-abstract-declarator-opt • parameters-and-qualifiers 494 | noptr-abstract-declarator-opt • "[" constant-expression-opt "]" attribute-specifier-seq-opt 564 parameters-and-qualifiers → • "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt "(" shift, and go to state 365 "[" shift, and go to state 927 parameters-and-qualifiers go to state 1066
495 noptr-abstract-declarator → "(" ptr-abstract-declarator • ")" ")" shift, and go to state 1067
139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 493 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 494 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 495 | • "(" ptr-abstract-declarator ")" 496 noptr-abstract-declarator-opt → • %empty ["(", "["] 497 | • noptr-abstract-declarator 599 ptr-abstract-declarator → • noptr-abstract-declarator 600 | • ptr-operator ptr-abstract-declarator-opt 600 | ptr-operator • ptr-abstract-declarator-opt 601 ptr-abstract-declarator-opt → • %empty [")"] 602 | • ptr-abstract-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 703 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "(" [reduce using rule 496 (noptr-abstract-declarator-opt)] ")" reduce using rule 601 (ptr-abstract-declarator-opt) $default reduce using rule 496 (noptr-abstract-declarator-opt) class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 707 noptr-abstract-declarator-opt go to state 924 ptr-abstract-declarator go to state 932 ptr-abstract-declarator-opt go to state 933 ptr-operator go to state 926 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 161 constant-expression-opt → • %empty ["]"] 162 | • constant-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 494 noptr-abstract-declarator → noptr-abstract-declarator-opt "[" • constant-expression-opt "]" attribute-specifier-seq-opt 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "]" reduce using rule 161 (constant-expression-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 643 constant-expression-opt go to state 1068 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
30 abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers • trailing-return-type 493 noptr-abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] 714 trailing-return-type → • "->" type-id "->" shift, and go to state 645 $default reduce using rule 493 (noptr-abstract-declarator) trailing-return-type go to state 1069
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 161 constant-expression-opt → • %empty ["]"] 162 | • constant-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 499 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator "[" • constant-expression-opt "]" attribute-specifier-seq-opt 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "]" reduce using rule 161 (constant-expression-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 643 constant-expression-opt go to state 1070 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
498 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator parameters-and-qualifiers • $default reduce using rule 498 (noptr-abstract-pack-declarator)
35 abstract-pack-declarator → ptr-operator abstract-pack-declarator • $default reduce using rule 35 (abstract-pack-declarator)
602 ptr-abstract-declarator-opt → ptr-abstract-declarator • $default reduce using rule 602 (ptr-abstract-declarator-opt)
600 ptr-abstract-declarator → ptr-operator ptr-abstract-declarator-opt • $default reduce using rule 600 (ptr-abstract-declarator)
566 placeholder-type-specifier → type-constraint-opt "decltype" "(" "auto" ")" • $default reduce using rule 566 (placeholder-type-specifier)
6 ELLIPSIS-opt → "..." • [IDENTIFIER, "::", "operator", "decltype", "~"] 500 noptr-abstract-pack-declarator → "..." • [",", "...", "=", "(", ")", "[", ">"] IDENTIFIER reduce using rule 6 (ELLIPSIS-opt) "::" reduce using rule 6 (ELLIPSIS-opt) "operator" reduce using rule 6 (ELLIPSIS-opt) "decltype" reduce using rule 6 (ELLIPSIS-opt) "~" reduce using rule 6 (ELLIPSIS-opt) $default reduce using rule 500 (noptr-abstract-pack-declarator)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 139 class-name → • IDENTIFIER 140 | • simple-template-id 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 493 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 494 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 495 | • "(" ptr-abstract-declarator ")" 495 | "(" • ptr-abstract-declarator ")" 496 noptr-abstract-declarator-opt → • %empty ["(", "["] 497 | • noptr-abstract-declarator 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 504 | "(" • ptr-declarator ")" 599 ptr-abstract-declarator → • noptr-abstract-declarator 600 | • ptr-operator ptr-abstract-declarator-opt 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 936 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 496 (noptr-abstract-declarator-opt)] "[" reduce using rule 496 (noptr-abstract-declarator-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 707 noptr-abstract-declarator-opt go to state 924 noptr-declarator go to state 347 ptr-abstract-declarator go to state 925 ptr-declarator go to state 348 ptr-operator go to state 1071 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
556 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt • [",", "...", ")", ">"] 557 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt • "=" initializer-clause "=" shift, and go to state 1072 $default reduce using rule 556 (parameter-declaration)
554 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator • [",", "...", ")", ">"] 555 | attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator • "=" initializer-clause "=" shift, and go to state 1073 $default reduce using rule 554 (parameter-declaration)
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 35 | ptr-operator • abstract-pack-declarator 139 class-name → • IDENTIFIER 140 | • simple-template-id 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 493 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 494 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 495 | • "(" ptr-abstract-declarator ")" 496 noptr-abstract-declarator-opt → • %empty ["(", "["] 497 | • noptr-abstract-declarator 498 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 499 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 500 | • "..." 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 599 ptr-abstract-declarator → • noptr-abstract-declarator 600 | • ptr-operator ptr-abstract-declarator-opt 600 | ptr-operator • ptr-abstract-declarator-opt 601 ptr-abstract-declarator-opt → • %empty [",", "...", "=", ")", ">"] 602 | • ptr-abstract-declarator 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 604 | ptr-operator • ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 935 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 936 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "..." [reduce using rule 601 (ptr-abstract-declarator-opt)] IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 496 (noptr-abstract-declarator-opt)] "[" reduce using rule 496 (noptr-abstract-declarator-opt) "operator" reduce using rule 5 (ELLIPSIS-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) $default reduce using rule 601 (ptr-abstract-declarator-opt) ELLIPSIS-opt go to state 165 abstract-pack-declarator go to state 931 class-name go to state 55 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 707 noptr-abstract-declarator-opt go to state 924 noptr-abstract-pack-declarator go to state 709 noptr-declarator go to state 347 ptr-abstract-declarator go to state 932 ptr-abstract-declarator-opt go to state 933 ptr-declarator go to state 368 ptr-operator go to state 939 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
732 type-parameter → template-head type-parameter-key ELLIPSIS-opt IDENTIFIER-opt • $default reduce using rule 732 (type-parameter)
139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 343 id-expression → • unqualified-id 344 | • qualified-id 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 733 type-parameter → template-head type-parameter-key IDENTIFIER-opt "=" • id-expression 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id IDENTIFIER shift, and go to state 238 "::" shift, and go to state 6 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 "~" shift, and go to state 354 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 121 enum-name go to state 71 id-expression go to state 1074 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 356 operator-function-id go to state 302 qualified-id go to state 307 simple-template-id go to state 311 template-id go to state 314 template-name go to state 102 type-name go to state 106 typedef-name go to state 108 unqualified-id go to state 319
731 type-parameter → type-constraint IDENTIFIER-opt "=" type-id • $default reduce using rule 731 (type-parameter)
729 type-parameter → type-parameter-key IDENTIFIER-opt "=" type-id • $default reduce using rule 729 (type-parameter)
44 alias-declaration → "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" • $default reduce using rule 44 (alias-declaration)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 222 defining-type-specifier-seq → defining-type-specifier attribute-specifier-seq-opt • ["...", IDENTIFIER, "::", ";", "(", "&", "[", "&&", "decltype", "*"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 222 (defining-type-specifier-seq)] $default reduce using rule 222 (defining-type-specifier-seq) alignment-specifier go to state 166 attribute-specifier go to state 167
223 defining-type-specifier-seq → defining-type-specifier defining-type-specifier-seq • $default reduce using rule 223 (defining-type-specifier-seq)
218 defining-type-id → defining-type-specifier-seq abstract-declarator-opt • $default reduce using rule 218 (defining-type-id)
488 noexcept-expression → "noexcept" "(" expression ")" • $default reduce using rule 488 (noexcept-expression)
289 fold-expression → "(" "..." fold-operator cast-expression • ")" ")" shift, and go to state 1075
288 fold-expression → "(" cast-expression fold-operator "..." • ")" 290 | "(" cast-expression fold-operator "..." • fold-operator cast-expression ")" 291 fold-operator → • "+" 292 | • "-" 293 | • "*" 294 | • "/" 295 | • "%" 296 | • "^" 297 | • "&" 298 | • "|" 299 | • "<<" 300 | • ">>" 301 | • "+=" 302 | • "-=" 303 | • "*=" 304 | • "/=" 305 | • "%=" 306 | • "^=" 307 | • "&=" 308 | • "|=" 309 | • "<<=" 310 | • ">>=" 311 | • "=" 312 | • "==" 313 | • "!=" 314 | • "<" 315 | • ">" 316 | • "<=" 317 | • ">=" 318 | • "&&" 319 | • "||" 320 | • "," 321 | • ".*" 322 | • "->*" "," shift, and go to state 729 "+" shift, and go to state 730 "-" shift, and go to state 731 "=" shift, and go to state 732 ")" shift, and go to state 1076 "&" shift, and go to state 733 "*=" shift, and go to state 734 "/=" shift, and go to state 735 "%=" shift, and go to state 736 "+=" shift, and go to state 737 "-=" shift, and go to state 738 ">>=" shift, and go to state 739 "<<=" shift, and go to state 740 "&=" shift, and go to state 741 "^=" shift, and go to state 742 "|=" shift, and go to state 743 "&&" shift, and go to state 744 "||" shift, and go to state 745 "==" shift, and go to state 746 "!=" shift, and go to state 747 "^" shift, and go to state 748 "<" shift, and go to state 749 ">" shift, and go to state 750 "*" shift, and go to state 751 "/" shift, and go to state 752 "%" shift, and go to state 753 "|" shift, and go to state 754 "<<" shift, and go to state 755 ">>" shift, and go to state 756 "<=" shift, and go to state 757 ">=" shift, and go to state 758 ".*" shift, and go to state 759 "->*" shift, and go to state 760 fold-operator go to state 1077
131 cast-expression → "(" type-id ")" cast-expression • $default reduce using rule 131 (cast-expression)
649 simple-capture → "&" IDENTIFIER ELLIPSIS-opt • $default reduce using rule 649 (simple-capture)
117 brace-or-equal-initializer → • "=" initializer-clause 118 | • braced-init-list 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 350 init-capture → "&" ELLIPSIS-opt IDENTIFIER • initializer 362 initializer → • brace-or-equal-initializer 363 | • "(" expression-list ")" "=" shift, and go to state 396 "(" shift, and go to state 397 "{" shift, and go to state 398 brace-or-equal-initializer go to state 400 braced-init-list go to state 401 initializer go to state 1078
349 init-capture → ELLIPSIS-opt IDENTIFIER initializer • $default reduce using rule 349 (init-capture)
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 350 init-capture → "&" • ELLIPSIS-opt IDENTIFIER initializer 649 simple-capture → "&" • IDENTIFIER ELLIPSIS-opt "..." shift, and go to state 156 IDENTIFIER shift, and go to state 766 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] ELLIPSIS-opt go to state 767
129 capture-list → capture-list • "," capture 385 lambda-capture → capture-default "," capture-list • ["]"] "," shift, and go to state 771 $default reduce using rule 385 (lambda-capture)
129 capture-list → capture-list "," capture • $default reduce using rule 129 (capture-list)
513 overloadable-operator → "delete" "[" "]" • $default reduce using rule 513 (overloadable-operator)
512 overloadable-operator → "new" "[" "]" • $default reduce using rule 512 (overloadable-operator)
509 operator-function-id → "operator" overloadable-operator "<" template-argument-list-opt • ">" ">" shift, and go to state 1079
168 conversion-declarator → ptr-operator conversion-declarator-opt • $default reduce using rule 168 (conversion-declarator)
628 requirement-parameter-list → "(" parameter-declaration-clause ")" • $default reduce using rule 628 (requirement-parameter-list)
139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 736 type-requirement → "typename" • nested-name-specifier-opt type-name ";" 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → "typename" • nested-name-specifier IDENTIFIER 746 | "typename" • nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 1080 nested-name-specifier-opt go to state 1081 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 150 compound-requirement → "{" • expression "}" NOEXCEPT-opt return-type-requirement-opt ";" 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 1082 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 163 constraint-expression → • logical-or-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 472 nested-requirement → "requires" • constraint-expression ";" 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 628 requirement-parameter-list → • "(" parameter-declaration-clause ")" 629 requirement-parameter-list-opt → • %empty ["{"] 630 | • requirement-parameter-list 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 636 | "requires" • requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 1083 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "{" reduce using rule 629 (requirement-parameter-list-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 constraint-expression go to state 1084 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 921 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requirement-parameter-list go to state 523 requirement-parameter-list-opt go to state 524 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
625 requirement → compound-requirement • $default reduce using rule 625 (requirement)
280 expression → expression • "," assignment-expression 655 simple-requirement → expression • ";" "," shift, and go to state 552 ";" shift, and go to state 1085
626 requirement → nested-requirement • $default reduce using rule 626 (requirement)
631 requirement-seq → requirement • $default reduce using rule 631 (requirement-seq)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 150 compound-requirement → • "{" expression "}" NOEXCEPT-opt return-type-requirement-opt ";" 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 472 nested-requirement → • "requires" constraint-expression ";" 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 623 requirement → • simple-requirement 624 | • type-requirement 625 | • compound-requirement 626 | • nested-requirement 627 requirement-body → "{" requirement-seq • "}" 632 requirement-seq → requirement-seq • requirement 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 655 simple-requirement → • expression ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 736 type-requirement → • "typename" nested-name-specifier-opt type-name ";" 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 963 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 964 "}" shift, and go to state 1086 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 965 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 compound-requirement go to state 966 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 967 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 nested-requirement go to state 968 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requirement go to state 1087 requires-expression go to state 309 shift-expression go to state 310 simple-requirement go to state 971 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-requirement go to state 972 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
623 requirement → simple-requirement • $default reduce using rule 623 (requirement)
624 requirement → type-requirement • $default reduce using rule 624 (requirement)
582 postfix-expression → "dynamic_cast" "<" type-id ">" • "(" expression ")" "(" shift, and go to state 1088
583 postfix-expression → "static_cast" "<" type-id ">" • "(" expression ")" "(" shift, and go to state 1089
584 postfix-expression → "reinterpret_cast" "<" type-id ">" • "(" expression ")" "(" shift, and go to state 1090
585 postfix-expression → "const_cast" "<" type-id ">" • "(" expression ")" "(" shift, and go to state 1091
586 postfix-expression → "typeid" "(" expression ")" • $default reduce using rule 586 (postfix-expression)
587 postfix-expression → "typeid" "(" type-id ")" • $default reduce using rule 587 (postfix-expression)
755 unary-expression → "sizeof" "..." "(" IDENTIFIER • ")" ")" shift, and go to state 1092
754 unary-expression → "sizeof" "(" type-id ")" • $default reduce using rule 754 (unary-expression)
756 unary-expression → "alignof" "(" type-id ")" • $default reduce using rule 756 (unary-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 225 | SCOPE-opt "delete" "[" "]" • cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 1093 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
483 new-placement → "(" expression-list • ")" ")" shift, and go to state 1094
136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 478 new-expression → SCOPE-opt "new" new-placement-opt "(" • type-id ")" new-initializer-opt 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) class-key go to state 424 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 1095 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 109
121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 477 new-expression → SCOPE-opt "new" new-placement-opt new-type-id • new-initializer-opt 479 new-initializer → • "(" expression-list-opt ")" 480 | • braced-init-list 481 new-initializer-opt → • %empty [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 482 | • new-initializer "(" shift, and go to state 1096 "{" shift, and go to state 398 "{" [reduce using rule 481 (new-initializer-opt)] $default reduce using rule 481 (new-initializer-opt) braced-init-list go to state 1097 new-initializer go to state 1098 new-initializer-opt go to state 1099
139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 473 new-declarator → • ptr-operator new-declarator-opt 474 | • noptr-new-declarator 475 new-declarator-opt → • %empty [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 476 | • new-declarator 486 new-type-id → type-specifier-seq • new-declarator-opt 505 noptr-new-declarator → • "[" expression-opt "]" attribute-specifier-seq-opt 506 | • noptr-new-declarator "[" constant-expression "]" attribute-specifier-seq-opt 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "&" shift, and go to state 160 "[" shift, and go to state 1100 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "&" [reduce using rule 475 (new-declarator-opt)] "&&" [reduce using rule 475 (new-declarator-opt)] "*" [reduce using rule 475 (new-declarator-opt)] $default reduce using rule 475 (new-declarator-opt) class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 new-declarator go to state 1101 new-declarator-opt go to state 1102 noptr-new-declarator go to state 1103 ptr-operator go to state 1104 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 193 decl-specifier-seq-opt → • %empty ["noexcept", "alignas", "[", "{", "->", "requires"] 194 | • decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 389 lambda-declarator → "(" parameter-declaration-clause ")" • lambda-specifiers requires-clause-opt 393 lambda-specifiers → • decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 193 (decl-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 557 decl-specifier-seq-opt go to state 558 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 lambda-specifiers go to state 1105 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
391 lambda-expression → lambda-introducer "<" template-parameter-list ">" • requires-clause-opt lambda-declarator compound-statement 633 requires-clause → • "requires" constraint-logical-or-expression 634 requires-clause-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "::", "typename", "virtual", "alignas", "(", "[", "{", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 635 | • requires-clause "requires" shift, and go to state 399 $default reduce using rule 634 (requires-clause-opt) requires-clause go to state 718 requires-clause-opt go to state 1106
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 489 noexcept-specifier → "noexcept" "(" • constant-expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 1107 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 393 lambda-specifiers → decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt • trailing-return-type-opt 714 trailing-return-type → • "->" type-id 715 trailing-return-type-opt → • %empty ["{", "requires"] 716 | • trailing-return-type "alignas" shift, and go to state 158 "[" shift, and go to state 162 "->" shift, and go to state 645 $default reduce using rule 715 (trailing-return-type-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 trailing-return-type go to state 1108 trailing-return-type-opt go to state 1109
456 namespace-alias-definition → "namespace" • IDENTIFIER "=" qualified-namespace-specifier ";" IDENTIFIER shift, and go to state 1110
84 attribute-specifier-seq-opt → attribute-specifier-seq • ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 653 simple-declaration → attribute-specifier-seq • decl-specifier-seq init-declarator-list ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 84 (attribute-specifier-seq-opt)] "extern" [reduce using rule 84 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 84 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 84 (attribute-specifier-seq-opt)] "::" [reduce using rule 84 (attribute-specifier-seq-opt)] "typename" [reduce using rule 84 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 84 (attribute-specifier-seq-opt)] "class" [reduce using rule 84 (attribute-specifier-seq-opt)] "struct" [reduce using rule 84 (attribute-specifier-seq-opt)] "union" [reduce using rule 84 (attribute-specifier-seq-opt)] "const" [reduce using rule 84 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 84 (attribute-specifier-seq-opt)] "friend" [reduce using rule 84 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 84 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 84 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 84 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 84 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 84 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 84 (attribute-specifier-seq-opt)] "auto" reduce using rule 84 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 84 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 84 (attribute-specifier-seq-opt)] "bool" [reduce using rule 84 (attribute-specifier-seq-opt)] "short" [reduce using rule 84 (attribute-specifier-seq-opt)] "int" [reduce using rule 84 (attribute-specifier-seq-opt)] "long" [reduce using rule 84 (attribute-specifier-seq-opt)] "signed" [reduce using rule 84 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 84 (attribute-specifier-seq-opt)] "float" [reduce using rule 84 (attribute-specifier-seq-opt)] "double" [reduce using rule 84 (attribute-specifier-seq-opt)] "void" [reduce using rule 84 (attribute-specifier-seq-opt)] "static" [reduce using rule 84 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 84 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 84 (attribute-specifier-seq-opt)] $default reduce using rule 84 (attribute-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 153 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 49 asm-declaration → attribute-specifier-seq-opt • "asm" "(" string-literal ")" ";" 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 151 compound-statement → • "{" statement-seq-opt "}" 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 173 coroutine-return-statement → • "co_return" expr-or-braced-init-list-opt ";" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 279 expression → • assignment-expression 280 | • expression "," assignment-expression 284 expression-opt → • %empty [";"] 285 | • expression 286 expression-statement → • expression-opt ";" 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 332 function-specifier → • "virtual" 333 | • explicit-specifier 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 371 iteration-statement → • "while" "(" condition ")" statement 372 | • "do" statement "while" "(" expression ")" ";" 373 | • "for" "(" init-statement condition-opt ";" expression-opt ")" statement 374 | • "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" statement 375 jump-statement → • "break" ";" 376 | • "continue" ";" 377 | • "return" expr-or-braced-init-list-opt ";" 378 | • coroutine-return-statement 379 | • "goto" IDENTIFIER ";" 380 labeled-statement → attribute-specifier-seq-opt • IDENTIFIER ":" statement 381 | attribute-specifier-seq-opt • "case" constant-expression ":" statement 382 | attribute-specifier-seq-opt • "default" ":" statement 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 640 selection-statement → • "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement 641 | • "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" statement 642 | • "if" NOT-opt "consteval" compound-statement 643 | • "if" NOT-opt "consteval" compound-statement "else" statement 644 | • "switch" "(" init-statement-opt condition ")" statement 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 654 simple-declaration → attribute-specifier-seq-opt • decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 677 statement → attribute-specifier-seq-opt • expression-statement 678 | attribute-specifier-seq-opt • compound-statement 679 | attribute-specifier-seq-opt • selection-statement 680 | attribute-specifier-seq-opt • iteration-statement 681 | attribute-specifier-seq-opt • jump-statement 683 | attribute-specifier-seq-opt • try-block 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 719 try-block → • "try" compound-statement handler-seq 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 786 using-directive → attribute-specifier-seq-opt • "using" "namespace" nested-name-specifier-opt namespace-name ";" 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 1111 "inline" shift, and go to state 151 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "+" shift, and go to state 243 "-" shift, and go to state 244 "using" shift, and go to state 157 "alignas" shift, and go to state 158 "(" shift, and go to state 245 "&" shift, and go to state 246 "asm" shift, and go to state 161 "[" shift, and go to state 1112 "co_await" shift, and go to state 248 "{" shift, and go to state 813 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "co_return" shift, and go to state 1113 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 "default" shift, and go to state 1114 "try" shift, and go to state 1115 INTEGER_LITERAL shift, and go to state 254 "while" shift, and go to state 1116 "do" shift, and go to state 1117 "for" shift, and go to state 1118 "break" shift, and go to state 1119 "continue" shift, and go to state 1120 "return" shift, and go to state 1121 "goto" shift, and go to state 1122 "case" shift, and go to state 1123 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "if" shift, and go to state 1124 "switch" shift, and go to state 1125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] ";" reduce using rule 284 (expression-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 alignment-specifier go to state 166 and-expression go to state 274 assignment-expression go to state 275 attribute-specifier go to state 167 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 compare-expression go to state 280 compound-statement go to state 1126 conditional-expression go to state 281 conversion-function-id go to state 282 coroutine-return-statement go to state 1127 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 1128 decltype-specifier go to state 63 defining-type-specifier go to state 65 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 equality-expression go to state 284 exclusive-or-expression go to state 285 explicit-specifier go to state 155 expression go to state 1129 expression-opt go to state 1130 expression-statement go to state 1131 floating-point-literal go to state 287 fold-expression go to state 288 function-specifier go to state 79 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 iteration-statement go to state 1132 jump-statement go to state 1133 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 selection-statement go to state 1134 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 427 storage-class-specifier go to state 99 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 try-block go to state 1135 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
212 declaration-statement → block-declaration • $default reduce using rule 212 (declaration-statement)
682 statement → declaration-statement • $default reduce using rule 682 (statement)
676 statement → labeled-statement • $default reduce using rule 676 (statement)
684 statement-seq → statement • $default reduce using rule 684 (statement-seq)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 212 declaration-statement → • block-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 380 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 381 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 382 | • attribute-specifier-seq-opt "default" ":" statement 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 676 statement → • labeled-statement 677 | • attribute-specifier-seq-opt expression-statement 678 | • attribute-specifier-seq-opt compound-statement 679 | • attribute-specifier-seq-opt selection-statement 680 | • attribute-specifier-seq-opt iteration-statement 681 | • attribute-specifier-seq-opt jump-statement 682 | • declaration-statement 683 | • attribute-specifier-seq-opt try-block 685 statement-seq → statement-seq • statement 687 statement-seq-opt → statement-seq • ["}"] 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 991 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 687 (statement-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 993 block-declaration go to state 994 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 995 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 996 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1136 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
151 compound-statement → "{" statement-seq-opt • "}" "}" shift, and go to state 1137
707 template-id → literal-operator-id "<" template-argument-list-opt ">" • $default reduce using rule 707 (template-id)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 159 | logical-or-expression "?" expression ":" • assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 1138 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
706 template-id → operator-function-id "<" template-argument-list-opt ">" • $default reduce using rule 706 (template-id)
573 postfix-expression → postfix-expression "(" expression-list-opt ")" • $default reduce using rule 573 (postfix-expression)
572 postfix-expression → postfix-expression "[" expression-list-opt "]" • $default reduce using rule 572 (postfix-expression)
579 postfix-expression → postfix-expression "->" TEMPLATE-opt id-expression • $default reduce using rule 579 (postfix-expression)
578 postfix-expression → postfix-expression "." TEMPLATE-opt id-expression • $default reduce using rule 578 (postfix-expression)
574 postfix-expression → simple-type-specifier "(" expression-list-opt ")" • $default reduce using rule 574 (postfix-expression)
575 postfix-expression → typename-specifier "(" expression-list-opt ")" • $default reduce using rule 575 (postfix-expression)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 208 declaration-seq → • declaration 209 | • declaration-seq declaration 210 declaration-seq-opt → • %empty ["}"] 211 | • declaration-seq 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 273 | • "export" "{" declaration-seq-opt "}" 274 | • "export" module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 395 | • "extern" string-literal declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 457 namespace-body → • declaration-seq-opt 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 471 | "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" • namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "}" reduce using rule 210 (declaration-seq-opt) "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 849 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-body go to state 1139 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
689 static_assert-declaration → "static_assert" "(" constant-expression "," string-literal ")" • ";" ";" shift, and go to state 1140
454 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body • "}" "}" shift, and go to state 1141
766 unnamed-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" • $default reduce using rule 766 (unnamed-namespace-definition)
786 using-directive → attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" • $default reduce using rule 786 (using-directive)
46 alignment-specifier → "alignas" "(" constant-expression ELLIPSIS-opt ")" • $default reduce using rule 46 (alignment-specifier)
45 alignment-specifier → "alignas" "(" type-id ELLIPSIS-opt ")" • $default reduce using rule 45 (alignment-specifier)
49 asm-declaration → attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" • $default reduce using rule 49 (asm-declaration)
87 attribute-using-prefix → "using" attribute-namespace ":" • $default reduce using rule 87 (attribute-using-prefix)
74 attribute-list → attribute "..." • $default reduce using rule 74 (attribute-list)
67 attribute → • attribute-token attribute-argument-clause-opt 73 attribute-list → attribute-list "," • attribute-opt 75 | attribute-list "," • attribute "..." 76 attribute-namespace → • IDENTIFIER 77 attribute-opt → • %empty [",", "]"] 78 | • attribute 79 attribute-scoped-token → • attribute-namespace "::" IDENTIFIER 85 attribute-token → • IDENTIFIER 86 | • attribute-scoped-token IDENTIFIER shift, and go to state 857 $default reduce using rule 77 (attribute-opt) attribute go to state 1142 attribute-namespace go to state 860 attribute-opt go to state 1143 attribute-scoped-token go to state 862 attribute-token go to state 863
80 attribute-specifier → "[" "[" attribute-using-prefix-opt attribute-list "]" • "]" "]" shift, and go to state 1144
79 attribute-scoped-token → attribute-namespace "::" • IDENTIFIER IDENTIFIER shift, and go to state 1145
68 attribute-argument-clause → "(" • balanced-token-seq-opt ")" 91 balanced-token → • "(" balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 95 balanced-token-seq → • balanced-token 96 | • balanced-token-seq balanced-token 97 balanced-token-seq-opt → • %empty [")"] 98 | • balanced-token-seq "(" shift, and go to state 1146 "[" shift, and go to state 1147 "{" shift, and go to state 1148 BALANCED_TOKEN shift, and go to state 1149 $default reduce using rule 97 (balanced-token-seq-opt) balanced-token go to state 1150 balanced-token-seq go to state 1151 balanced-token-seq-opt go to state 1152
70 attribute-argument-clause-opt → attribute-argument-clause • $default reduce using rule 70 (attribute-argument-clause-opt)
67 attribute → attribute-token attribute-argument-clause-opt • $default reduce using rule 67 (attribute)
346 identifier-list → identifier-list "," • IDENTIFIER IDENTIFIER shift, and go to state 1153
117 brace-or-equal-initializer → • "=" initializer-clause 118 | • braced-init-list 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 362 initializer → • brace-or-equal-initializer 363 | • "(" expression-list ")" 654 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" • initializer ";" "=" shift, and go to state 396 "(" shift, and go to state 397 "{" shift, and go to state 398 brace-or-equal-initializer go to state 400 braced-init-list go to state 401 initializer go to state 1154
329 function-body → "=" "delete" • ";" ";" shift, and go to state 1155
328 function-body → "=" "default" • ";" ";" shift, and go to state 1156
139 class-name → IDENTIFIER • ["::"] 248 enum-name → IDENTIFIER • ["::"] 412 mem-initializer-id → IDENTIFIER • ["(", "{"] 455 namespace-alias → IDENTIFIER • ["::"] 461 namespace-name → IDENTIFIER • ["::"] 708 template-name → IDENTIFIER • ["<"] 743 typedef-name → IDENTIFIER • ["::"] "::" reduce using rule 139 (class-name) "::" [reduce using rule 248 (enum-name)] "::" [reduce using rule 455 (namespace-alias)] "::" [reduce using rule 461 (namespace-name)] "::" [reduce using rule 743 (typedef-name)] "<" reduce using rule 708 (template-name) $default reduce using rule 412 (mem-initializer-id)
411 mem-initializer-id → class-or-decltype • $default reduce using rule 411 (mem-initializer-id)
5 ELLIPSIS-opt → • %empty [",", "{"] 6 | • "..." 413 mem-initializer-list → mem-initializer • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1157
121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 409 mem-initializer → mem-initializer-id • "(" expression-list-opt ")" 410 | mem-initializer-id • braced-init-list "(" shift, and go to state 1158 "{" shift, and go to state 398 braced-init-list go to state 1159
174 ctor-initializer → ":" mem-initializer-list • ["{"] 414 mem-initializer-list → mem-initializer-list • "," mem-initializer ELLIPSIS-opt "," shift, and go to state 1160 $default reduce using rule 174 (ctor-initializer)
151 compound-statement → • "{" statement-seq-opt "}" 334 function-try-block → "try" ctor-initializer-opt • compound-statement handler-seq "{" shift, and go to state 813 compound-statement go to state 1161
326 function-body → ctor-initializer-opt compound-statement • $default reduce using rule 326 (function-body)
564 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt • ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt 614 ref-qualifier → • "&" 615 | • "&&" 616 ref-qualifier-opt → • %empty [",", "...", "noexcept", "=", ";", "alignas", "(", ")", "[", ":", "{", "final", "->", ">", "try", "requires", "override"] 617 | • ref-qualifier "&" shift, and go to state 357 "&&" shift, and go to state 358 $default reduce using rule 616 (ref-qualifier-opt) ref-qualifier go to state 359 ref-qualifier-opt go to state 1162
559 parameter-declaration-clause → parameter-declaration-list "," "..." • $default reduce using rule 559 (parameter-declaration-clause)
561 parameter-declaration-list → parameter-declaration-list "," parameter-declaration • $default reduce using rule 561 (parameter-declaration-list)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 503 noptr-declarator → noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 503 (noptr-declarator)] $default reduce using rule 503 (noptr-declarator) alignment-specifier go to state 166 attribute-specifier go to state 167
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 429 member-declarator → IDENTIFIER-opt attribute-specifier-seq-opt • ":" constant-expression brace-or-equal-initializer-opt "alignas" shift, and go to state 158 "[" shift, and go to state 162 ":" shift, and go to state 1163 alignment-specifier go to state 166 attribute-specifier go to state 167
120 brace-or-equal-initializer-opt → brace-or-equal-initializer • $default reduce using rule 120 (brace-or-equal-initializer-opt)
428 member-declarator → declarator brace-or-equal-initializer-opt • $default reduce using rule 428 (member-declarator)
174 ctor-initializer → • ":" mem-initializer-list 175 ctor-initializer-opt → • %empty ["{"] 176 | • ctor-initializer 326 function-body → • ctor-initializer-opt compound-statement 327 | • function-try-block 328 | • "=" "default" ";" 329 | • "=" "delete" ";" 331 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause • function-body 334 function-try-block → • "try" ctor-initializer-opt compound-statement handler-seq 427 member-declarator → declarator requires-clause • [",", ";"] "=" shift, and go to state 867 ":" shift, and go to state 868 "try" shift, and go to state 869 "{" reduce using rule 175 (ctor-initializer-opt) $default reduce using rule 427 (member-declarator) ctor-initializer go to state 870 ctor-initializer-opt go to state 871 function-body go to state 872 function-try-block go to state 873
174 ctor-initializer → • ":" mem-initializer-list 175 ctor-initializer-opt → • %empty ["{"] 176 | • ctor-initializer 326 function-body → • ctor-initializer-opt compound-statement 327 | • function-try-block 328 | • "=" "default" ";" 329 | • "=" "delete" ";" 330 function-definition → attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt • function-body 334 function-try-block → • "try" ctor-initializer-opt compound-statement handler-seq 426 member-declarator → declarator virt-specifier-seq-opt • pure-specifier-opt 609 pure-specifier → • "=" INTEGER_LITERAL 610 pure-specifier-opt → • %empty [",", ";"] 611 | • pure-specifier "=" shift, and go to state 1164 ":" shift, and go to state 868 "try" shift, and go to state 869 "{" reduce using rule 175 (ctor-initializer-opt) $default reduce using rule 610 (pure-specifier-opt) ctor-initializer go to state 870 ctor-initializer-opt go to state 871 function-body go to state 875 function-try-block go to state 873 pure-specifier go to state 1165 pure-specifier-opt go to state 1166
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 11 IDENTIFIER-opt → • %empty ["alignas", "[", ":"] 12 | • IDENTIFIER 139 class-name → • IDENTIFIER 140 | • simple-template-id 213 declarator → • ptr-declarator 214 | • noptr-declarator parameters-and-qualifiers trailing-return-type 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 426 member-declarator → • declarator virt-specifier-seq-opt pure-specifier-opt 427 | • declarator requires-clause 428 | • declarator brace-or-equal-initializer-opt 429 | • IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt 431 member-declarator-list → member-declarator-list "," • member-declarator 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 883 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "operator" reduce using rule 5 (ELLIPSIS-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] "~" reduce using rule 5 (ELLIPSIS-opt) $default reduce using rule 11 (IDENTIFIER-opt) ELLIPSIS-opt go to state 165 IDENTIFIER-opt go to state 884 class-name go to state 55 declarator go to state 1167 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 member-declarator go to state 1168 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
415 member-declaration → attribute-specifier-seq-opt decl-specifier-seq-opt member-declarator-list-opt ";" • $default reduce using rule 415 (member-declaration)
40 access-specifier-opt → access-specifier • $default reduce using rule 40 (access-specifier-opt)
103 base-specifier → attribute-specifier-seq-opt "virtual" access-specifier-opt • class-or-decltype 139 class-name → • IDENTIFIER 140 | • simple-template-id 141 class-or-decltype → • nested-name-specifier-opt type-name 142 | • nested-name-specifier "template" simple-template-id 143 | • decltype-specifier 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] class-name go to state 55 class-or-decltype go to state 1169 decltype-specifier go to state 893 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 894 nested-name-specifier-opt go to state 895 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
28 VIRTUAL-opt → "virtual" • $default reduce using rule 28 (VIRTUAL-opt)
104 base-specifier → attribute-specifier-seq-opt access-specifier VIRTUAL-opt • class-or-decltype 139 class-name → • IDENTIFIER 140 | • simple-template-id 141 class-or-decltype → • nested-name-specifier-opt type-name 142 | • nested-name-specifier "template" simple-template-id 143 | • decltype-specifier 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] class-name go to state 55 class-or-decltype go to state 1170 decltype-specifier go to state 893 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 894 nested-name-specifier-opt go to state 895 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
22 TEMPLATE-opt → "template" • [IDENTIFIER] 142 class-or-decltype → nested-name-specifier "template" • simple-template-id 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 192 IDENTIFIER [reduce using rule 22 (TEMPLATE-opt)] simple-template-id go to state 1171 template-name go to state 102
141 class-or-decltype → nested-name-specifier-opt type-name • $default reduce using rule 141 (class-or-decltype)
5 ELLIPSIS-opt → • %empty [",", "{"] 6 | • "..." 106 base-specifier-list → base-specifier-list "," base-specifier • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1172
5 ELLIPSIS-opt → • %empty [",", ")", "]", "}"] 6 | • "..." 367 initializer-list → initializer-list "," initializer-clause • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1173
228 designated-initializer-list → designated-initializer-list "," designated-initializer-clause • $default reduce using rule 228 (designated-initializer-list)
122 braced-init-list → "{" designated-initializer-list COMMA-opt "}" • $default reduce using rule 122 (braced-init-list)
121 braced-init-list → "{" initializer-list COMMA-opt "}" • $default reduce using rule 121 (braced-init-list)
165 constraint-logical-and-expression → constraint-logical-and-expression "&&" primary-expression • $default reduce using rule 165 (constraint-logical-and-expression)
165 constraint-logical-and-expression → constraint-logical-and-expression • "&&" primary-expression 167 constraint-logical-or-expression → constraint-logical-or-expression "||" constraint-logical-and-expression • [",", "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "::", "template", "typename", "virtual", "using", "=", ";", "alignas", "(", "&", "asm", "[", ":", "{", "class", "struct", "union", "concept", "||", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "->", "enum", "explicit", "*", "try", "import", "namespace", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable"] "&&" shift, and go to state 908 $default reduce using rule 167 (constraint-logical-or-expression) Conflict between rule 167 and token "&&" resolved as shift ("||" < "&&").
217 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" • simple-template-id ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER IDENTIFIER shift, and go to state 192 simple-template-id go to state 1174 template-name go to state 102
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 438 module-declaration → EXPORT-opt "module" module-name module-partition-opt attribute-specifier-seq-opt • ";" ";" shift, and go to state 1175 "alignas" shift, and go to state 158 "[" shift, and go to state 162 alignment-specifier go to state 166 attribute-specifier go to state 167
596 private-module-fragment → "module" ":" "private" • ";" declaration-seq-opt ";" shift, and go to state 1176
152 concept-definition → "concept" concept-name "=" constraint-expression ";" • $default reduce using rule 152 (concept-definition)
231 elaborated-type-specifier → class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER • $default reduce using rule 231 (elaborated-type-specifier)
699 template-argument-list → template-argument-list "," template-argument ELLIPSIS-opt • $default reduce using rule 699 (template-argument-list)
493 noptr-abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers • $default reduce using rule 493 (noptr-abstract-declarator)
495 noptr-abstract-declarator → "(" ptr-abstract-declarator ")" • $default reduce using rule 495 (noptr-abstract-declarator)
494 noptr-abstract-declarator → noptr-abstract-declarator-opt "[" constant-expression-opt • "]" attribute-specifier-seq-opt "]" shift, and go to state 1177
30 abstract-declarator → noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type • $default reduce using rule 30 (abstract-declarator)
499 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator "[" constant-expression-opt • "]" attribute-specifier-seq-opt "]" shift, and go to state 1178
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 139 class-name → • IDENTIFIER 140 | • simple-template-id 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 493 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 494 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 495 | • "(" ptr-abstract-declarator ")" 496 noptr-abstract-declarator-opt → • %empty ["(", "["] 497 | • noptr-abstract-declarator 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 599 ptr-abstract-declarator → • noptr-abstract-declarator 600 | • ptr-operator ptr-abstract-declarator-opt 600 | ptr-operator • ptr-abstract-declarator-opt 601 ptr-abstract-declarator-opt → • %empty [")"] 602 | • ptr-abstract-declarator 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 604 | ptr-operator • ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 936 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 496 (noptr-abstract-declarator-opt)] ")" reduce using rule 601 (ptr-abstract-declarator-opt) "[" reduce using rule 496 (noptr-abstract-declarator-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 707 noptr-abstract-declarator-opt go to state 924 noptr-declarator go to state 347 ptr-abstract-declarator go to state 932 ptr-abstract-declarator-opt go to state 933 ptr-declarator go to state 368 ptr-operator go to state 1071 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 364 initializer-clause → • assignment-expression 365 | • braced-init-list 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 557 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" • initializer-clause 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 1179 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 364 initializer-clause → • assignment-expression 365 | • braced-init-list 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 555 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" • initializer-clause 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 1180 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
733 type-parameter → template-head type-parameter-key IDENTIFIER-opt "=" id-expression • $default reduce using rule 733 (type-parameter)
289 fold-expression → "(" "..." fold-operator cast-expression ")" • $default reduce using rule 289 (fold-expression)
288 fold-expression → "(" cast-expression fold-operator "..." ")" • $default reduce using rule 288 (fold-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 290 | "(" cast-expression fold-operator "..." fold-operator • cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 1181 character-literal go to state 279 class-name go to state 55 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 requires-expression go to state 309 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
350 init-capture → "&" ELLIPSIS-opt IDENTIFIER initializer • $default reduce using rule 350 (init-capture)
509 operator-function-id → "operator" overloadable-operator "<" template-argument-list-opt ">" • $default reduce using rule 509 (operator-function-id)
21 TEMPLATE-opt → • %empty [IDENTIFIER] 22 | • "template" 467 nested-name-specifier → nested-name-specifier • IDENTIFIER "::" 468 | nested-name-specifier • TEMPLATE-opt simple-template-id "::" 470 nested-name-specifier-opt → nested-name-specifier • [IDENTIFIER] 745 typename-specifier → "typename" nested-name-specifier • IDENTIFIER 746 | "typename" nested-name-specifier • TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 229 "template" shift, and go to state 230 IDENTIFIER [reduce using rule 21 (TEMPLATE-opt)] IDENTIFIER [reduce using rule 470 (nested-name-specifier-opt)] TEMPLATE-opt go to state 231
139 class-name → • IDENTIFIER 140 | • simple-template-id 248 enum-name → • IDENTIFIER 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 736 type-requirement → "typename" nested-name-specifier-opt • type-name ";" 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 525 class-name go to state 55 enum-name go to state 71 simple-template-id go to state 96 template-name go to state 102 type-name go to state 1182 typedef-name go to state 108
150 compound-requirement → "{" expression • "}" NOEXCEPT-opt return-type-requirement-opt ";" 280 expression → expression • "," assignment-expression "," shift, and go to state 552 "}" shift, and go to state 1183
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "this", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 131 | "(" • type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 288 | "(" • cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 289 | "(" • "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 290 | "(" • cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 554 parameter-declaration → • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator 555 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause 556 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt 557 | • attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause 558 parameter-declaration-clause → • parameter-declaration-list-opt ELLIPSIS-opt 559 | • parameter-declaration-list "," "..." 560 parameter-declaration-list → • parameter-declaration 561 | • parameter-declaration-list "," parameter-declaration 562 parameter-declaration-list-opt → • %empty ["...", ")"] 563 | • parameter-declaration-list 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 591 | "(" • expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 628 requirement-parameter-list → "(" • parameter-declaration-clause ")" 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 724 type-id → • type-specifier-seq abstract-declarator-opt 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list "..." shift, and go to state 457 IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 "..." [reduce using rule 562 (parameter-declaration-list-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "this" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] ")" reduce using rule 562 (parameter-declaration-list-opt) "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 220 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 458 character-literal go to state 279 class-key go to state 424 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 cv-qualifier go to state 57 decltype-specifier go to state 63 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 459 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 parameter-declaration go to state 639 parameter-declaration-clause go to state 782 parameter-declaration-list go to state 641 parameter-declaration-list-opt go to state 642 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 427 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-id go to state 460 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 433 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
472 nested-requirement → "requires" constraint-expression • ";" ";" shift, and go to state 1184
655 simple-requirement → expression ";" • $default reduce using rule 655 (simple-requirement)
627 requirement-body → "{" requirement-seq "}" • $default reduce using rule 627 (requirement-body)
632 requirement-seq → requirement-seq requirement • $default reduce using rule 632 (requirement-seq)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 582 | "dynamic_cast" "<" type-id ">" "(" • expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 1185 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 583 | "static_cast" "<" type-id ">" "(" • expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 1186 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 584 | "reinterpret_cast" "<" type-id ">" "(" • expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 1187 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 585 | "const_cast" "<" type-id ">" "(" • expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 1188 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
755 unary-expression → "sizeof" "..." "(" IDENTIFIER ")" • $default reduce using rule 755 (unary-expression)
225 delete-expression → SCOPE-opt "delete" "[" "]" cast-expression • $default reduce using rule 225 (delete-expression)
483 new-placement → "(" expression-list ")" • $default reduce using rule 483 (new-placement)
478 new-expression → SCOPE-opt "new" new-placement-opt "(" type-id • ")" new-initializer-opt ")" shift, and go to state 1189
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 281 expression-list → • initializer-list 282 expression-list-opt → • %empty [")"] 283 | • expression-list 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 364 initializer-clause → • assignment-expression 365 | • braced-init-list 366 initializer-list → • initializer-clause ELLIPSIS-opt 367 | • initializer-list "," initializer-clause ELLIPSIS-opt 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 479 new-initializer → "(" • expression-list-opt ")" 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] ")" reduce using rule 282 (expression-list-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression-list go to state 829 expression-list-opt go to state 1190 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 666 initializer-list go to state 667 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
480 new-initializer → braced-init-list • $default reduce using rule 480 (new-initializer)
482 new-initializer-opt → new-initializer • $default reduce using rule 482 (new-initializer-opt)
477 new-expression → SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt • $default reduce using rule 477 (new-expression)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 284 expression-opt → • %empty ["]"] 285 | • expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 505 noptr-new-declarator → "[" • expression-opt "]" attribute-specifier-seq-opt 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "]" reduce using rule 284 (expression-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 1129 expression-opt go to state 1191 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
476 new-declarator-opt → new-declarator • $default reduce using rule 476 (new-declarator-opt)
486 new-type-id → type-specifier-seq new-declarator-opt • $default reduce using rule 486 (new-type-id)
474 new-declarator → noptr-new-declarator • [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 506 noptr-new-declarator → noptr-new-declarator • "[" constant-expression "]" attribute-specifier-seq-opt "[" shift, and go to state 1192 $default reduce using rule 474 (new-declarator)
139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 473 new-declarator → • ptr-operator new-declarator-opt 473 | ptr-operator • new-declarator-opt 474 | • noptr-new-declarator 475 new-declarator-opt → • %empty [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 476 | • new-declarator 505 noptr-new-declarator → • "[" expression-opt "]" attribute-specifier-seq-opt 506 | • noptr-new-declarator "[" constant-expression "]" attribute-specifier-seq-opt 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "&" shift, and go to state 160 "[" shift, and go to state 1100 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 "&" [reduce using rule 475 (new-declarator-opt)] "&&" [reduce using rule 475 (new-declarator-opt)] "*" [reduce using rule 475 (new-declarator-opt)] $default reduce using rule 475 (new-declarator-opt) class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 new-declarator go to state 1101 new-declarator-opt go to state 1193 noptr-new-declarator go to state 1103 ptr-operator go to state 1104 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
389 lambda-declarator → "(" parameter-declaration-clause ")" lambda-specifiers • requires-clause-opt 633 requires-clause → • "requires" constraint-logical-or-expression 634 requires-clause-opt → • %empty ["{"] 635 | • requires-clause "requires" shift, and go to state 399 $default reduce using rule 634 (requires-clause-opt) requires-clause go to state 718 requires-clause-opt go to state 1194
133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 193 decl-specifier-seq-opt → • %empty ["noexcept", "alignas", "[", "{", "->"] 194 | • decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 388 lambda-declarator → • lambda-specifiers 389 | • "(" parameter-declaration-clause ")" lambda-specifiers requires-clause-opt 391 lambda-expression → lambda-introducer "<" template-parameter-list ">" requires-clause-opt • lambda-declarator compound-statement 393 lambda-specifiers → • decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "(" shift, and go to state 555 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 193 (decl-specifier-seq-opt) class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 557 decl-specifier-seq-opt go to state 558 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 lambda-declarator go to state 1195 lambda-specifiers go to state 560 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
489 noexcept-specifier → "noexcept" "(" constant-expression • ")" ")" shift, and go to state 1196
716 trailing-return-type-opt → trailing-return-type • $default reduce using rule 716 (trailing-return-type-opt)
393 lambda-specifiers → decl-specifier-seq-opt noexcept-specifier-opt attribute-specifier-seq-opt trailing-return-type-opt • $default reduce using rule 393 (lambda-specifiers)
456 namespace-alias-definition → "namespace" IDENTIFIER • "=" qualified-namespace-specifier ";" "=" shift, and go to state 338
139 class-name → IDENTIFIER • ["::"] 248 enum-name → IDENTIFIER • ["::"] 380 labeled-statement → attribute-specifier-seq-opt IDENTIFIER • ":" statement 455 namespace-alias → IDENTIFIER • ["::"] 461 namespace-name → IDENTIFIER • ["::"] 708 template-name → IDENTIFIER • ["<"] 743 typedef-name → IDENTIFIER • ["::"] 767 unqualified-id → IDENTIFIER • [",", "+", "-", "=", ";", "(", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "<=>", "?", "&&", "||", "->", ".", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*", "++", "--"] ":" shift, and go to state 1197 "::" reduce using rule 139 (class-name) "::" [reduce using rule 248 (enum-name)] "::" [reduce using rule 455 (namespace-alias)] "::" [reduce using rule 461 (namespace-name)] "::" [reduce using rule 743 (typedef-name)] "<" reduce using rule 708 (template-name) "<" [reduce using rule 767 (unqualified-id)] $default reduce using rule 767 (unqualified-id)
5 ELLIPSIS-opt → • %empty [IDENTIFIER] 6 | • "..." 80 attribute-specifier → "[" • "[" attribute-using-prefix-opt attribute-list "]" "]" 124 capture → • simple-capture 125 | • init-capture 126 capture-default → • "&" 127 | • "=" 128 capture-list → • capture 129 | • capture-list "," capture 349 init-capture → • ELLIPSIS-opt IDENTIFIER initializer 350 | • "&" ELLIPSIS-opt IDENTIFIER initializer 383 lambda-capture → • capture-default 384 | • capture-list 385 | • capture-default "," capture-list 386 lambda-capture-opt → • %empty ["]"] 387 | • lambda-capture 392 lambda-introducer → "[" • lambda-capture-opt "]" 648 simple-capture → • IDENTIFIER ELLIPSIS-opt 649 | • "&" IDENTIFIER ELLIPSIS-opt 650 | • "this" 651 | • "*" "this" "..." shift, and go to state 156 IDENTIFIER shift, and go to state 461 "this" shift, and go to state 462 "=" shift, and go to state 463 "&" shift, and go to state 464 "[" shift, and go to state 351 "*" shift, and go to state 465 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 386 (lambda-capture-opt) ELLIPSIS-opt go to state 466 capture go to state 467 capture-default go to state 468 capture-list go to state 469 init-capture go to state 470 lambda-capture go to state 471 lambda-capture-opt go to state 472 simple-capture go to state 473
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 173 coroutine-return-statement → "co_return" • expr-or-braced-init-list-opt ";" 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 275 expr-or-braced-init-list → • expression 276 | • braced-init-list 277 expr-or-braced-init-list-opt → • %empty [";"] 278 | • expr-or-braced-init-list 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] ";" reduce using rule 277 (expr-or-braced-init-list-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 1198 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expr-or-braced-init-list go to state 1199 expr-or-braced-init-list-opt go to state 1200 expression go to state 1201 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
382 labeled-statement → attribute-specifier-seq-opt "default" • ":" statement ":" shift, and go to state 1202
151 compound-statement → • "{" statement-seq-opt "}" 719 try-block → "try" • compound-statement handler-seq "{" shift, and go to state 813 compound-statement go to state 1203
371 iteration-statement → "while" • "(" condition ")" statement "(" shift, and go to state 1204
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 212 declaration-statement → • block-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 372 iteration-statement → "do" • statement "while" "(" expression ")" ";" 380 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 381 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 382 | • attribute-specifier-seq-opt "default" ":" statement 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 676 statement → • labeled-statement 677 | • attribute-specifier-seq-opt expression-statement 678 | • attribute-specifier-seq-opt compound-statement 679 | • attribute-specifier-seq-opt selection-statement 680 | • attribute-specifier-seq-opt iteration-statement 681 | • attribute-specifier-seq-opt jump-statement 682 | • declaration-statement 683 | • attribute-specifier-seq-opt try-block 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 991 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 993 block-declaration go to state 994 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 995 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 996 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1205 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
373 iteration-statement → "for" • "(" init-statement condition-opt ";" expression-opt ")" statement 374 | "for" • "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" statement "(" shift, and go to state 1206
375 jump-statement → "break" • ";" ";" shift, and go to state 1207
376 jump-statement → "continue" • ";" ";" shift, and go to state 1208
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 275 expr-or-braced-init-list → • expression 276 | • braced-init-list 277 expr-or-braced-init-list-opt → • %empty [";"] 278 | • expr-or-braced-init-list 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 377 jump-statement → "return" • expr-or-braced-init-list-opt ";" 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] ";" reduce using rule 277 (expr-or-braced-init-list-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 1198 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expr-or-braced-init-list go to state 1199 expr-or-braced-init-list-opt go to state 1209 expression go to state 1201 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
379 jump-statement → "goto" • IDENTIFIER ";" IDENTIFIER shift, and go to state 1210
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 381 labeled-statement → attribute-specifier-seq-opt "case" • constant-expression ":" statement 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 1211 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
3 CONSTEXPR-opt → • %empty ["("] 4 | • "constexpr" 17 NOT-opt → • %empty ["consteval"] 18 | • "!" 640 selection-statement → "if" • CONSTEXPR-opt "(" init-statement-opt condition ")" statement 641 | "if" • CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" statement 642 | "if" • NOT-opt "consteval" compound-statement 643 | "if" • NOT-opt "consteval" compound-statement "else" statement "constexpr" shift, and go to state 1212 "!" shift, and go to state 1213 "consteval" reduce using rule 17 (NOT-opt) $default reduce using rule 3 (CONSTEXPR-opt) CONSTEXPR-opt go to state 1214 NOT-opt go to state 1215
644 selection-statement → "switch" • "(" init-statement-opt condition ")" statement "(" shift, and go to state 1216
678 statement → attribute-specifier-seq-opt compound-statement • $default reduce using rule 678 (statement)
378 jump-statement → coroutine-return-statement • $default reduce using rule 378 (jump-statement)
614 ref-qualifier → • "&" 615 | • "&&" 616 ref-qualifier-opt → • %empty ["["] 617 | • ref-qualifier 654 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq • ref-qualifier-opt "[" identifier-list "]" initializer ";" "&" shift, and go to state 357 "&&" shift, and go to state 358 $default reduce using rule 616 (ref-qualifier-opt) ref-qualifier go to state 359 ref-qualifier-opt go to state 360
280 expression → expression • "," assignment-expression 285 expression-opt → expression • [";", ")", "]"] "," shift, and go to state 552 $default reduce using rule 285 (expression-opt)
286 expression-statement → expression-opt • ";" ";" shift, and go to state 1217
677 statement → attribute-specifier-seq-opt expression-statement • $default reduce using rule 677 (statement)
680 statement → attribute-specifier-seq-opt iteration-statement • $default reduce using rule 680 (statement)
681 statement → attribute-specifier-seq-opt jump-statement • $default reduce using rule 681 (statement)
679 statement → attribute-specifier-seq-opt selection-statement • $default reduce using rule 679 (statement)
683 statement → attribute-specifier-seq-opt try-block • $default reduce using rule 683 (statement)
685 statement-seq → statement-seq statement • $default reduce using rule 685 (statement-seq)
151 compound-statement → "{" statement-seq-opt "}" • $default reduce using rule 151 (compound-statement)
159 conditional-expression → logical-or-expression "?" expression ":" assignment-expression • $default reduce using rule 159 (conditional-expression)
471 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body • "}" "}" shift, and go to state 1218
689 static_assert-declaration → "static_assert" "(" constant-expression "," string-literal ")" ";" • $default reduce using rule 689 (static_assert-declaration)
454 named-namespace-definition → INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" • $default reduce using rule 454 (named-namespace-definition)
75 attribute-list → attribute-list "," attribute • "..." 78 attribute-opt → attribute • [",", "]"] "..." shift, and go to state 1219 $default reduce using rule 78 (attribute-opt)
73 attribute-list → attribute-list "," attribute-opt • $default reduce using rule 73 (attribute-list)
80 attribute-specifier → "[" "[" attribute-using-prefix-opt attribute-list "]" "]" • $default reduce using rule 80 (attribute-specifier)
79 attribute-scoped-token → attribute-namespace "::" IDENTIFIER • $default reduce using rule 79 (attribute-scoped-token)
91 balanced-token → • "(" balanced-token-seq-opt ")" 91 | "(" • balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 95 balanced-token-seq → • balanced-token 96 | • balanced-token-seq balanced-token 97 balanced-token-seq-opt → • %empty [")"] 98 | • balanced-token-seq "(" shift, and go to state 1146 "[" shift, and go to state 1147 "{" shift, and go to state 1148 BALANCED_TOKEN shift, and go to state 1149 $default reduce using rule 97 (balanced-token-seq-opt) balanced-token go to state 1150 balanced-token-seq go to state 1151 balanced-token-seq-opt go to state 1220
91 balanced-token → • "(" balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 92 | "[" • balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 95 balanced-token-seq → • balanced-token 96 | • balanced-token-seq balanced-token 97 balanced-token-seq-opt → • %empty ["]"] 98 | • balanced-token-seq "(" shift, and go to state 1146 "[" shift, and go to state 1147 "{" shift, and go to state 1148 BALANCED_TOKEN shift, and go to state 1149 $default reduce using rule 97 (balanced-token-seq-opt) balanced-token go to state 1150 balanced-token-seq go to state 1151 balanced-token-seq-opt go to state 1221
91 balanced-token → • "(" balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 93 | "{" • balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 95 balanced-token-seq → • balanced-token 96 | • balanced-token-seq balanced-token 97 balanced-token-seq-opt → • %empty ["}"] 98 | • balanced-token-seq "(" shift, and go to state 1146 "[" shift, and go to state 1147 "{" shift, and go to state 1148 BALANCED_TOKEN shift, and go to state 1149 $default reduce using rule 97 (balanced-token-seq-opt) balanced-token go to state 1150 balanced-token-seq go to state 1151 balanced-token-seq-opt go to state 1222
94 balanced-token → BALANCED_TOKEN • $default reduce using rule 94 (balanced-token)
95 balanced-token-seq → balanced-token • $default reduce using rule 95 (balanced-token-seq)
91 balanced-token → • "(" balanced-token-seq-opt ")" 92 | • "[" balanced-token-seq-opt "]" 93 | • "{" balanced-token-seq-opt "}" 94 | • BALANCED_TOKEN 96 balanced-token-seq → balanced-token-seq • balanced-token 98 balanced-token-seq-opt → balanced-token-seq • [")", "]", "}"] "(" shift, and go to state 1146 "[" shift, and go to state 1147 "{" shift, and go to state 1148 BALANCED_TOKEN shift, and go to state 1149 $default reduce using rule 98 (balanced-token-seq-opt) balanced-token go to state 1223
68 attribute-argument-clause → "(" balanced-token-seq-opt • ")" ")" shift, and go to state 1224
346 identifier-list → identifier-list "," IDENTIFIER • $default reduce using rule 346 (identifier-list)
654 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer • ";" ";" shift, and go to state 1225
329 function-body → "=" "delete" ";" • $default reduce using rule 329 (function-body)
328 function-body → "=" "default" ";" • $default reduce using rule 328 (function-body)
413 mem-initializer-list → mem-initializer ELLIPSIS-opt • $default reduce using rule 413 (mem-initializer-list)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 281 expression-list → • initializer-list 282 expression-list-opt → • %empty [")"] 283 | • expression-list 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 364 initializer-clause → • assignment-expression 365 | • braced-init-list 366 initializer-list → • initializer-clause ELLIPSIS-opt 367 | • initializer-list "," initializer-clause ELLIPSIS-opt 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 409 mem-initializer → mem-initializer-id "(" • expression-list-opt ")" 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] ")" reduce using rule 282 (expression-list-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 662 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 663 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression-list go to state 829 expression-list-opt go to state 1226 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 initializer-clause go to state 666 initializer-list go to state 667 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
410 mem-initializer → mem-initializer-id braced-init-list • $default reduce using rule 410 (mem-initializer)
139 class-name → • IDENTIFIER 140 | • simple-template-id 141 class-or-decltype → • nested-name-specifier-opt type-name 142 | • nested-name-specifier "template" simple-template-id 143 | • decltype-specifier 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 409 mem-initializer → • mem-initializer-id "(" expression-list-opt ")" 410 | • mem-initializer-id braced-init-list 411 mem-initializer-id → • class-or-decltype 412 | • IDENTIFIER 414 mem-initializer-list → mem-initializer-list "," • mem-initializer ELLIPSIS-opt 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 1029 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] class-name go to state 55 class-or-decltype go to state 1030 decltype-specifier go to state 893 enum-name go to state 71 mem-initializer go to state 1227 mem-initializer-id go to state 1032 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 894 nested-name-specifier-opt go to state 895 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
334 function-try-block → "try" ctor-initializer-opt compound-statement • handler-seq 338 handler → • "catch" "(" exception-declaration ")" compound-statement 339 handler-seq → • handler handler-seq-opt "catch" shift, and go to state 1228 handler go to state 1229 handler-seq go to state 1230
489 noexcept-specifier → • "noexcept" "(" constant-expression ")" 490 | • "noexcept" 491 noexcept-specifier-opt → • %empty [",", "...", "=", ";", "alignas", "(", ")", "[", ":", "{", "final", "->", ">", "try", "requires", "override"] 492 | • noexcept-specifier 564 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt • noexcept-specifier-opt attribute-specifier-seq-opt "noexcept" shift, and go to state 810 $default reduce using rule 491 (noexcept-specifier-opt) noexcept-specifier go to state 811 noexcept-specifier-opt go to state 1231
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 429 member-declarator → IDENTIFIER-opt attribute-specifier-seq-opt ":" • constant-expression brace-or-equal-initializer-opt 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 1232 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
328 function-body → "=" • "default" ";" 329 | "=" • "delete" ";" 609 pure-specifier → "=" • INTEGER_LITERAL "delete" shift, and go to state 1027 "default" shift, and go to state 1028 INTEGER_LITERAL shift, and go to state 1233
611 pure-specifier-opt → pure-specifier • $default reduce using rule 611 (pure-specifier-opt)
426 member-declarator → declarator virt-specifier-seq-opt pure-specifier-opt • $default reduce using rule 426 (member-declarator)
117 brace-or-equal-initializer → • "=" initializer-clause 118 | • braced-init-list 119 brace-or-equal-initializer-opt → • %empty [",", ";"] 120 | • brace-or-equal-initializer 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 426 member-declarator → declarator • virt-specifier-seq-opt pure-specifier-opt 427 | declarator • requires-clause 428 | declarator • brace-or-equal-initializer-opt 633 requires-clause → • "requires" constraint-logical-or-expression 788 virt-specifier → • "override" 789 | • "final" 790 virt-specifier-seq → • virt-specifier 791 | • virt-specifier-seq virt-specifier 792 virt-specifier-seq-opt → • %empty [",", "=", ";"] 793 | • virt-specifier-seq "=" shift, and go to state 396 "{" shift, and go to state 398 "final" shift, and go to state 632 "requires" shift, and go to state 399 "override" shift, and go to state 633 "," reduce using rule 119 (brace-or-equal-initializer-opt) "," [reduce using rule 792 (virt-specifier-seq-opt)] "=" [reduce using rule 792 (virt-specifier-seq-opt)] ";" reduce using rule 119 (brace-or-equal-initializer-opt) ";" [reduce using rule 792 (virt-specifier-seq-opt)] $default reduce using rule 119 (brace-or-equal-initializer-opt) brace-or-equal-initializer go to state 1041 brace-or-equal-initializer-opt go to state 1042 braced-init-list go to state 401 requires-clause go to state 1234 virt-specifier go to state 635 virt-specifier-seq go to state 636 virt-specifier-seq-opt go to state 1235
431 member-declarator-list → member-declarator-list "," member-declarator • $default reduce using rule 431 (member-declarator-list)
103 base-specifier → attribute-specifier-seq-opt "virtual" access-specifier-opt class-or-decltype • $default reduce using rule 103 (base-specifier)
104 base-specifier → attribute-specifier-seq-opt access-specifier VIRTUAL-opt class-or-decltype • $default reduce using rule 104 (base-specifier)
142 class-or-decltype → nested-name-specifier "template" simple-template-id • $default reduce using rule 142 (class-or-decltype)
106 base-specifier-list → base-specifier-list "," base-specifier ELLIPSIS-opt • $default reduce using rule 106 (base-specifier-list)
367 initializer-list → initializer-list "," initializer-clause ELLIPSIS-opt • $default reduce using rule 367 (initializer-list)
217 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id • ";" ";" shift, and go to state 1236
438 module-declaration → EXPORT-opt "module" module-name module-partition-opt attribute-specifier-seq-opt ";" • $default reduce using rule 438 (module-declaration)
9 EXTERN-opt → • %empty ["template"] 10 | • "extern" 13 INLINE-opt → • %empty ["namespace"] 14 | • "inline" 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 71 attribute-declaration → • attribute-specifier-seq ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "...", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "using", "alignas", "(", "&", "asm", "[", "class", "struct", "union", "&&", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "*", "~", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 195 declaration → • block-declaration 196 | • nodeclspec-function-declaration 197 | • function-definition 198 | • template-declaration 199 | • deduction-guide 200 | • explicit-instantiation 201 | • explicit-specialization 202 | • export-declaration 203 | • linkage-specification 204 | • namespace-definition 205 | • empty-declaration 206 | • attribute-declaration 207 | • module-import-declaration 208 declaration-seq → • declaration 209 | • declaration-seq declaration 210 declaration-seq-opt → • %empty [$end] 211 | • declaration-seq 216 decltype-specifier → • "decltype" "(" expression ")" 217 deduction-guide → • explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 235 empty-declaration → • ";" 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 266 explicit-instantiation → • EXTERN-opt "template" declaration 267 explicit-specialization → • "template" "<" ">" declaration 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 270 explicit-specifier-opt → • %empty [IDENTIFIER] 271 | • explicit-specifier 272 export-declaration → • "export" declaration 273 | • "export" "{" declaration-seq-opt "}" 274 | • "export" module-import-declaration 330 function-definition → • attribute-specifier-seq-opt decl-specifier-seq-opt declarator virt-specifier-seq-opt function-body 331 | • attribute-specifier-seq-opt decl-specifier-seq-opt declarator requires-clause function-body 332 function-specifier → • "virtual" 333 | • explicit-specifier 394 linkage-specification → • "extern" string-literal "{" declaration-seq-opt "}" 395 | • "extern" string-literal declaration 439 module-import-declaration → • "import" module-name attribute-specifier-seq-opt ";" 440 | • "import" module-partition attribute-specifier-seq-opt ";" 441 | • "import" header-name attribute-specifier-seq-opt ";" 454 named-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt IDENTIFIER "{" namespace-body "}" 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 458 namespace-definition → • named-namespace-definition 459 | • unnamed-namespace-definition 460 | • nested-namespace-definition 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 471 nested-namespace-definition → • "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" 487 nodeclspec-function-declaration → • attribute-specifier-seq-opt declarator ";" 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 596 private-module-fragment → "module" ":" "private" ";" • declaration-seq-opt 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 702 template-declaration → • template-head declaration 703 | • template-head concept-definition 704 template-head → • "template" "<" template-parameter-list ">" requires-clause-opt 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 766 unnamed-namespace-definition → • INLINE-opt "namespace" attribute-specifier-seq-opt "{" namespace-body "}" 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "export" shift, and go to state 2 "extern" shift, and go to state 3 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 5 "::" shift, and go to state 6 "template" shift, and go to state 7 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 ";" shift, and go to state 11 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "import" shift, and go to state 25 "namespace" shift, and go to state 26 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 $end reduce using rule 210 (declaration-seq-opt) "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 270 (explicit-specifier-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "template" [reduce using rule 9 (EXTERN-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "namespace" [reduce using rule 13 (INLINE-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) EXTERN-opt go to state 45 INLINE-opt go to state 46 alias-declaration go to state 47 asm-declaration go to state 48 attribute-declaration go to state 49 attribute-specifier-seq go to state 50 attribute-specifier-seq-opt go to state 51 block-declaration go to state 52 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration go to state 60 declaration-seq go to state 61 declaration-seq-opt go to state 1237 decltype-specifier go to state 63 deduction-guide go to state 64 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 empty-declaration go to state 68 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-instantiation go to state 73 explicit-specialization go to state 74 explicit-specifier go to state 75 explicit-specifier-opt go to state 76 export-declaration go to state 77 function-definition go to state 78 function-specifier go to state 79 linkage-specification go to state 82 module-import-declaration go to state 83 named-namespace-definition go to state 84 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-definition go to state 87 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 nested-namespace-definition go to state 91 nodeclspec-function-declaration go to state 92 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-declaration go to state 100 template-head go to state 101 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 unnamed-namespace-definition go to state 110 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 494 noptr-abstract-declarator → noptr-abstract-declarator-opt "[" constant-expression-opt "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1238
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 499 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator "[" constant-expression-opt "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1239
557 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq abstract-declarator-opt "=" initializer-clause • $default reduce using rule 557 (parameter-declaration)
555 parameter-declaration → attribute-specifier-seq-opt THIS-opt decl-specifier-seq declarator "=" initializer-clause • $default reduce using rule 555 (parameter-declaration)
290 fold-expression → "(" cast-expression fold-operator "..." fold-operator cast-expression • ")" ")" shift, and go to state 1240
736 type-requirement → "typename" nested-name-specifier-opt type-name • ";" ";" shift, and go to state 1241
15 NOEXCEPT-opt → • %empty [";", "->"] 16 | • "noexcept" 150 compound-requirement → "{" expression "}" • NOEXCEPT-opt return-type-requirement-opt ";" "noexcept" shift, and go to state 1242 $default reduce using rule 15 (NOEXCEPT-opt) NOEXCEPT-opt go to state 1243
472 nested-requirement → "requires" constraint-expression ";" • $default reduce using rule 472 (nested-requirement)
280 expression → expression • "," assignment-expression 582 postfix-expression → "dynamic_cast" "<" type-id ">" "(" expression • ")" "," shift, and go to state 552 ")" shift, and go to state 1244
280 expression → expression • "," assignment-expression 583 postfix-expression → "static_cast" "<" type-id ">" "(" expression • ")" "," shift, and go to state 552 ")" shift, and go to state 1245
280 expression → expression • "," assignment-expression 584 postfix-expression → "reinterpret_cast" "<" type-id ">" "(" expression • ")" "," shift, and go to state 552 ")" shift, and go to state 1246
280 expression → expression • "," assignment-expression 585 postfix-expression → "const_cast" "<" type-id ">" "(" expression • ")" "," shift, and go to state 552 ")" shift, and go to state 1247
121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 478 new-expression → SCOPE-opt "new" new-placement-opt "(" type-id ")" • new-initializer-opt 479 new-initializer → • "(" expression-list-opt ")" 480 | • braced-init-list 481 new-initializer-opt → • %empty [",", "...", "+", "-", "=", ";", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] 482 | • new-initializer "(" shift, and go to state 1096 "{" shift, and go to state 398 "{" [reduce using rule 481 (new-initializer-opt)] $default reduce using rule 481 (new-initializer-opt) braced-init-list go to state 1097 new-initializer go to state 1098 new-initializer-opt go to state 1248
479 new-initializer → "(" expression-list-opt • ")" ")" shift, and go to state 1249
505 noptr-new-declarator → "[" expression-opt • "]" attribute-specifier-seq-opt "]" shift, and go to state 1250
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 160 constant-expression → • conditional-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 506 noptr-new-declarator → noptr-new-declarator "[" • constant-expression "]" attribute-specifier-seq-opt 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 327 constant-expression go to state 1251 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 329 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324
473 new-declarator → ptr-operator new-declarator-opt • $default reduce using rule 473 (new-declarator)
389 lambda-declarator → "(" parameter-declaration-clause ")" lambda-specifiers requires-clause-opt • $default reduce using rule 389 (lambda-declarator)
151 compound-statement → • "{" statement-seq-opt "}" 391 lambda-expression → lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator • compound-statement "{" shift, and go to state 813 compound-statement go to state 1252
489 noexcept-specifier → "noexcept" "(" constant-expression ")" • $default reduce using rule 489 (noexcept-specifier)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 212 declaration-statement → • block-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 380 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 380 | attribute-specifier-seq-opt IDENTIFIER ":" • statement 381 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 382 | • attribute-specifier-seq-opt "default" ":" statement 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 676 statement → • labeled-statement 677 | • attribute-specifier-seq-opt expression-statement 678 | • attribute-specifier-seq-opt compound-statement 679 | • attribute-specifier-seq-opt selection-statement 680 | • attribute-specifier-seq-opt iteration-statement 681 | • attribute-specifier-seq-opt jump-statement 682 | • declaration-statement 683 | • attribute-specifier-seq-opt try-block 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 991 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 993 block-declaration go to state 994 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 995 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 996 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1253 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
276 expr-or-braced-init-list → braced-init-list • $default reduce using rule 276 (expr-or-braced-init-list)
278 expr-or-braced-init-list-opt → expr-or-braced-init-list • $default reduce using rule 278 (expr-or-braced-init-list-opt)
173 coroutine-return-statement → "co_return" expr-or-braced-init-list-opt • ";" ";" shift, and go to state 1254
275 expr-or-braced-init-list → expression • [";", ")"] 280 expression → expression • "," assignment-expression "," shift, and go to state 552 $default reduce using rule 275 (expr-or-braced-init-list)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 212 declaration-statement → • block-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 380 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 381 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 382 | • attribute-specifier-seq-opt "default" ":" statement 382 | attribute-specifier-seq-opt "default" ":" • statement 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 676 statement → • labeled-statement 677 | • attribute-specifier-seq-opt expression-statement 678 | • attribute-specifier-seq-opt compound-statement 679 | • attribute-specifier-seq-opt selection-statement 680 | • attribute-specifier-seq-opt iteration-statement 681 | • attribute-specifier-seq-opt jump-statement 682 | • declaration-statement 683 | • attribute-specifier-seq-opt try-block 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 991 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 993 block-declaration go to state 994 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 995 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 996 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1255 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
338 handler → • "catch" "(" exception-declaration ")" compound-statement 339 handler-seq → • handler handler-seq-opt 719 try-block → "try" compound-statement • handler-seq "catch" shift, and go to state 1228 handler go to state 1229 handler-seq go to state 1256
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 154 condition → • expression 155 | • attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 371 iteration-statement → "while" "(" • condition ")" statement 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1257 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 condition go to state 1258 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 1259 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
372 iteration-statement → "do" statement • "while" "(" expression ")" ";" "while" shift, and go to state 1260
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 279 expression → • assignment-expression 280 | • expression "," assignment-expression 284 expression-opt → • %empty [";"] 285 | • expression 286 expression-statement → • expression-opt ";" 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 332 function-specifier → • "virtual" 333 | • explicit-specifier 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 357 init-statement → • expression-statement 358 | • simple-declaration 359 | • alias-declaration 360 init-statement-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 361 | • init-statement 370 integer-literal → • INTEGER_LITERAL 373 iteration-statement → "for" "(" • init-statement condition-opt ";" expression-opt ")" statement 374 | "for" "(" • init-statement-opt for-range-declaration ":" for-range-initializer ")" statement 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 238 "inline" shift, and go to state 151 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "+" shift, and go to state 243 "-" shift, and go to state 244 "using" shift, and go to state 1261 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "constexpr" [reduce using rule 360 (init-statement-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 360 (init-statement-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 360 (init-statement-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "inline" [reduce using rule 360 (init-statement-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 360 (init-statement-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 360 (init-statement-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 360 (init-statement-opt)] ";" reduce using rule 284 (expression-opt) "alignas" reduce using rule 83 (attribute-specifier-seq-opt) "alignas" [reduce using rule 360 (init-statement-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 360 (init-statement-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 360 (init-statement-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 360 (init-statement-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 360 (init-statement-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 360 (init-statement-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 360 (init-statement-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 360 (init-statement-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 360 (init-statement-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 360 (init-statement-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 360 (init-statement-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 360 (init-statement-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "enum" [reduce using rule 360 (init-statement-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 360 (init-statement-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 360 (init-statement-opt)] "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char" [reduce using rule 360 (init-statement-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 360 (init-statement-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 360 (init-statement-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 360 (init-statement-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 360 (init-statement-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 360 (init-statement-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 360 (init-statement-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 360 (init-statement-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 360 (init-statement-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 360 (init-statement-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 360 (init-statement-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 360 (init-statement-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 360 (init-statement-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 360 (init-statement-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 360 (init-statement-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 360 (init-statement-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 360 (init-statement-opt)] $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 alias-declaration go to state 1262 and-expression go to state 274 assignment-expression go to state 275 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 1263 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 decltype-specifier go to state 63 defining-type-specifier go to state 65 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 equality-expression go to state 284 exclusive-or-expression go to state 285 explicit-specifier go to state 155 expression go to state 1129 expression-opt go to state 1130 expression-statement go to state 1264 floating-point-literal go to state 287 fold-expression go to state 288 function-specifier go to state 79 id-expression go to state 289 inclusive-or-expression go to state 290 init-statement go to state 1265 init-statement-opt go to state 1266 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-declaration go to state 1267 simple-template-id go to state 311 simple-type-specifier go to state 427 storage-class-specifier go to state 99 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
375 jump-statement → "break" ";" • $default reduce using rule 375 (jump-statement)
376 jump-statement → "continue" ";" • $default reduce using rule 376 (jump-statement)
377 jump-statement → "return" expr-or-braced-init-list-opt • ";" ";" shift, and go to state 1268
379 jump-statement → "goto" IDENTIFIER • ";" ";" shift, and go to state 1269
381 labeled-statement → attribute-specifier-seq-opt "case" constant-expression • ":" statement ":" shift, and go to state 1270
4 CONSTEXPR-opt → "constexpr" • $default reduce using rule 4 (CONSTEXPR-opt)
18 NOT-opt → "!" • $default reduce using rule 18 (NOT-opt)
640 selection-statement → "if" CONSTEXPR-opt • "(" init-statement-opt condition ")" statement 641 | "if" CONSTEXPR-opt • "(" init-statement-opt condition ")" statement "else" statement "(" shift, and go to state 1271
642 selection-statement → "if" NOT-opt • "consteval" compound-statement 643 | "if" NOT-opt • "consteval" compound-statement "else" statement "consteval" shift, and go to state 1272
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 279 expression → • assignment-expression 280 | • expression "," assignment-expression 284 expression-opt → • %empty [";"] 285 | • expression 286 expression-statement → • expression-opt ";" 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 332 function-specifier → • "virtual" 333 | • explicit-specifier 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 357 init-statement → • expression-statement 358 | • simple-declaration 359 | • alias-declaration 360 init-statement-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "alignas", "(", "&", "[", "co_await", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", INTEGER_LITERAL, "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 361 | • init-statement 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 selection-statement → "switch" "(" • init-statement-opt condition ")" statement 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 238 "inline" shift, and go to state 151 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "+" shift, and go to state 243 "-" shift, and go to state 244 "using" shift, and go to state 1261 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "constexpr" [reduce using rule 360 (init-statement-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 360 (init-statement-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 360 (init-statement-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "inline" [reduce using rule 360 (init-statement-opt)] "noexcept" [reduce using rule 360 (init-statement-opt)] "!" [reduce using rule 360 (init-statement-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 360 (init-statement-opt)] "this" [reduce using rule 360 (init-statement-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 360 (init-statement-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 360 (init-statement-opt)] "+" [reduce using rule 360 (init-statement-opt)] "-" [reduce using rule 360 (init-statement-opt)] ";" reduce using rule 284 (expression-opt) "alignas" reduce using rule 83 (attribute-specifier-seq-opt) "alignas" [reduce using rule 360 (init-statement-opt)] "(" [reduce using rule 360 (init-statement-opt)] "&" [reduce using rule 360 (init-statement-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 360 (init-statement-opt)] "co_await" [reduce using rule 360 (init-statement-opt)] BOOLEAN_LITERAL [reduce using rule 360 (init-statement-opt)] CHARACTER_LITERAL [reduce using rule 360 (init-statement-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 360 (init-statement-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 360 (init-statement-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 360 (init-statement-opt)] "operator" [reduce using rule 360 (init-statement-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 360 (init-statement-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 360 (init-statement-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 360 (init-statement-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 360 (init-statement-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 360 (init-statement-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 360 (init-statement-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 360 (init-statement-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "delete" [reduce using rule 360 (init-statement-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "enum" [reduce using rule 360 (init-statement-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 360 (init-statement-opt)] FLOATING_POINT_LITERAL [reduce using rule 360 (init-statement-opt)] "*" [reduce using rule 360 (init-statement-opt)] INTEGER_LITERAL [reduce using rule 360 (init-statement-opt)] "requires" [reduce using rule 360 (init-statement-opt)] "new" reduce using rule 19 (SCOPE-opt) "new" [reduce using rule 360 (init-statement-opt)] "~" [reduce using rule 360 (init-statement-opt)] "++" [reduce using rule 360 (init-statement-opt)] "--" [reduce using rule 360 (init-statement-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 360 (init-statement-opt)] "auto" [reduce using rule 722 (type-constraint-opt)] POINTER_LITERAL [reduce using rule 360 (init-statement-opt)] "dynamic_cast" [reduce using rule 360 (init-statement-opt)] "static_cast" [reduce using rule 360 (init-statement-opt)] "reinterpret_cast" [reduce using rule 360 (init-statement-opt)] "const_cast" [reduce using rule 360 (init-statement-opt)] "typeid" [reduce using rule 360 (init-statement-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char" [reduce using rule 360 (init-statement-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 360 (init-statement-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 360 (init-statement-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 360 (init-statement-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 360 (init-statement-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 360 (init-statement-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 360 (init-statement-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 360 (init-statement-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 360 (init-statement-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 360 (init-statement-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 360 (init-statement-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 360 (init-statement-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 360 (init-statement-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 360 (init-statement-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 360 (init-statement-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 360 (init-statement-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 360 (init-statement-opt)] STRING_LITERAL [reduce using rule 360 (init-statement-opt)] "throw" [reduce using rule 360 (init-statement-opt)] "sizeof" [reduce using rule 360 (init-statement-opt)] "alignof" [reduce using rule 360 (init-statement-opt)] USER_DEFINED_CHARACTER_LITERAL [reduce using rule 360 (init-statement-opt)] USER_DEFINED_FLOATING_POINT_LITERAL [reduce using rule 360 (init-statement-opt)] USER_DEFINED_INTEGER_LITERAL [reduce using rule 360 (init-statement-opt)] "co_yield" [reduce using rule 360 (init-statement-opt)] $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 alias-declaration go to state 1262 and-expression go to state 274 assignment-expression go to state 275 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 1263 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 decltype-specifier go to state 63 defining-type-specifier go to state 65 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 equality-expression go to state 284 exclusive-or-expression go to state 285 explicit-specifier go to state 155 expression go to state 1129 expression-opt go to state 1130 expression-statement go to state 1264 floating-point-literal go to state 287 fold-expression go to state 288 function-specifier go to state 79 id-expression go to state 289 inclusive-or-expression go to state 290 init-statement go to state 1273 init-statement-opt go to state 1274 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-declaration go to state 1267 simple-template-id go to state 311 simple-type-specifier go to state 427 storage-class-specifier go to state 99 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
286 expression-statement → expression-opt ";" • $default reduce using rule 286 (expression-statement)
471 nested-namespace-definition → "namespace" enclosing-namespace-specifier "::" INLINE-opt IDENTIFIER "{" namespace-body "}" • $default reduce using rule 471 (nested-namespace-definition)
75 attribute-list → attribute-list "," attribute "..." • $default reduce using rule 75 (attribute-list)
91 balanced-token → "(" balanced-token-seq-opt • ")" ")" shift, and go to state 1275
92 balanced-token → "[" balanced-token-seq-opt • "]" "]" shift, and go to state 1276
93 balanced-token → "{" balanced-token-seq-opt • "}" "}" shift, and go to state 1277
96 balanced-token-seq → balanced-token-seq balanced-token • $default reduce using rule 96 (balanced-token-seq)
68 attribute-argument-clause → "(" balanced-token-seq-opt ")" • $default reduce using rule 68 (attribute-argument-clause)
654 simple-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" • $default reduce using rule 654 (simple-declaration)
409 mem-initializer → mem-initializer-id "(" expression-list-opt • ")" ")" shift, and go to state 1278
5 ELLIPSIS-opt → • %empty [",", "{"] 6 | • "..." 414 mem-initializer-list → mem-initializer-list "," mem-initializer • ELLIPSIS-opt "..." shift, and go to state 156 $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 1279
338 handler → "catch" • "(" exception-declaration ")" compound-statement "(" shift, and go to state 1280
338 handler → • "catch" "(" exception-declaration ")" compound-statement 339 handler-seq → • handler handler-seq-opt 339 | handler • handler-seq-opt 340 handler-seq-opt → • %empty [$end, "constexpr", "...", "export", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "template", "this", "typename", "virtual", "private", "protected", "public", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", ":", "co_await", "{", "}", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "&&", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", "module", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "import", "namespace", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "else", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 341 | • handler-seq "catch" shift, and go to state 1228 $default reduce using rule 340 (handler-seq-opt) handler go to state 1229 handler-seq go to state 1281 handler-seq-opt go to state 1282
334 function-try-block → "try" ctor-initializer-opt compound-statement handler-seq • $default reduce using rule 334 (function-try-block)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 564 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1283
117 brace-or-equal-initializer → • "=" initializer-clause 118 | • braced-init-list 119 brace-or-equal-initializer-opt → • %empty [",", ";"] 120 | • brace-or-equal-initializer 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 429 member-declarator → IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression • brace-or-equal-initializer-opt "=" shift, and go to state 396 "{" shift, and go to state 398 $default reduce using rule 119 (brace-or-equal-initializer-opt) brace-or-equal-initializer go to state 1041 brace-or-equal-initializer-opt go to state 1284 braced-init-list go to state 401
609 pure-specifier → "=" INTEGER_LITERAL • $default reduce using rule 609 (pure-specifier)
427 member-declarator → declarator requires-clause • $default reduce using rule 427 (member-declarator)
426 member-declarator → declarator virt-specifier-seq-opt • pure-specifier-opt 609 pure-specifier → • "=" INTEGER_LITERAL 610 pure-specifier-opt → • %empty [",", ";"] 611 | • pure-specifier "=" shift, and go to state 1285 $default reduce using rule 610 (pure-specifier-opt) pure-specifier go to state 1165 pure-specifier-opt go to state 1166
217 deduction-guide → explicit-specifier-opt template-name "(" parameter-declaration-clause ")" "->" simple-template-id ";" • $default reduce using rule 217 (deduction-guide)
596 private-module-fragment → "module" ":" "private" ";" declaration-seq-opt • $default reduce using rule 596 (private-module-fragment)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 494 noptr-abstract-declarator → noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 494 (noptr-abstract-declarator)] $default reduce using rule 494 (noptr-abstract-declarator) alignment-specifier go to state 166 attribute-specifier go to state 167
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 499 noptr-abstract-pack-declarator → noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", ">", "try", "requires", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 499 (noptr-abstract-pack-declarator)] $default reduce using rule 499 (noptr-abstract-pack-declarator) alignment-specifier go to state 166 attribute-specifier go to state 167
290 fold-expression → "(" cast-expression fold-operator "..." fold-operator cast-expression ")" • $default reduce using rule 290 (fold-expression)
736 type-requirement → "typename" nested-name-specifier-opt type-name ";" • $default reduce using rule 736 (type-requirement)
16 NOEXCEPT-opt → "noexcept" • $default reduce using rule 16 (NOEXCEPT-opt)
150 compound-requirement → "{" expression "}" NOEXCEPT-opt • return-type-requirement-opt ";" 637 return-type-requirement → • "->" type-constraint 638 return-type-requirement-opt → • %empty [";"] 639 | • return-type-requirement "->" shift, and go to state 1286 $default reduce using rule 638 (return-type-requirement-opt) return-type-requirement go to state 1287 return-type-requirement-opt go to state 1288
582 postfix-expression → "dynamic_cast" "<" type-id ">" "(" expression ")" • $default reduce using rule 582 (postfix-expression)
583 postfix-expression → "static_cast" "<" type-id ">" "(" expression ")" • $default reduce using rule 583 (postfix-expression)
584 postfix-expression → "reinterpret_cast" "<" type-id ">" "(" expression ")" • $default reduce using rule 584 (postfix-expression)
585 postfix-expression → "const_cast" "<" type-id ">" "(" expression ")" • $default reduce using rule 585 (postfix-expression)
478 new-expression → SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt • $default reduce using rule 478 (new-expression)
479 new-initializer → "(" expression-list-opt ")" • $default reduce using rule 479 (new-initializer)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 505 noptr-new-declarator → "[" expression-opt "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1289
506 noptr-new-declarator → noptr-new-declarator "[" constant-expression • "]" attribute-specifier-seq-opt "]" shift, and go to state 1290
391 lambda-expression → lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement • $default reduce using rule 391 (lambda-expression)
380 labeled-statement → attribute-specifier-seq-opt IDENTIFIER ":" statement • $default reduce using rule 380 (labeled-statement)
173 coroutine-return-statement → "co_return" expr-or-braced-init-list-opt ";" • $default reduce using rule 173 (coroutine-return-statement)
382 labeled-statement → attribute-specifier-seq-opt "default" ":" statement • $default reduce using rule 382 (labeled-statement)
719 try-block → "try" compound-statement handler-seq • $default reduce using rule 719 (try-block)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 155 condition → attribute-specifier-seq-opt • decl-specifier-seq declarator brace-or-equal-initializer 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 1291 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
371 iteration-statement → "while" "(" condition • ")" statement ")" shift, and go to state 1292
154 condition → expression • [";", ")"] 280 expression → expression • "," assignment-expression "," shift, and go to state 552 $default reduce using rule 154 (condition)
372 iteration-statement → "do" statement "while" • "(" expression ")" ";" "(" shift, and go to state 1293
44 alias-declaration → "using" • IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" IDENTIFIER shift, and go to state 123
359 init-statement → alias-declaration • $default reduce using rule 359 (init-statement)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 654 simple-declaration → attribute-specifier-seq-opt • decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 1128 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
357 init-statement → expression-statement • $default reduce using rule 357 (init-statement)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 154 condition → • expression 155 | • attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 156 condition-opt → • %empty [";"] 157 | • condition 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 361 init-statement-opt → init-statement • ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 370 integer-literal → • INTEGER_LITERAL 373 iteration-statement → "for" "(" init-statement • condition-opt ";" expression-opt ")" statement 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 "constexpr" reduce using rule 83 (attribute-specifier-seq-opt) "constexpr" [reduce using rule 361 (init-statement-opt)] "extern" reduce using rule 83 (attribute-specifier-seq-opt) "extern" [reduce using rule 361 (init-statement-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 361 (init-statement-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" reduce using rule 83 (attribute-specifier-seq-opt) "inline" [reduce using rule 361 (init-statement-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 361 (init-statement-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 361 (init-statement-opt)] "virtual" reduce using rule 83 (attribute-specifier-seq-opt) "virtual" [reduce using rule 361 (init-statement-opt)] ";" reduce using rule 156 (condition-opt) "alignas" reduce using rule 83 (attribute-specifier-seq-opt) "alignas" [reduce using rule 361 (init-statement-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 361 (init-statement-opt)] "class" reduce using rule 83 (attribute-specifier-seq-opt) "class" [reduce using rule 361 (init-statement-opt)] "struct" reduce using rule 83 (attribute-specifier-seq-opt) "struct" [reduce using rule 361 (init-statement-opt)] "union" reduce using rule 83 (attribute-specifier-seq-opt) "union" [reduce using rule 361 (init-statement-opt)] "const" reduce using rule 83 (attribute-specifier-seq-opt) "const" [reduce using rule 361 (init-statement-opt)] "volatile" reduce using rule 83 (attribute-specifier-seq-opt) "volatile" [reduce using rule 361 (init-statement-opt)] "friend" reduce using rule 83 (attribute-specifier-seq-opt) "friend" [reduce using rule 361 (init-statement-opt)] "typedef" reduce using rule 83 (attribute-specifier-seq-opt) "typedef" [reduce using rule 361 (init-statement-opt)] "consteval" reduce using rule 83 (attribute-specifier-seq-opt) "consteval" [reduce using rule 361 (init-statement-opt)] "constinit" reduce using rule 83 (attribute-specifier-seq-opt) "constinit" [reduce using rule 361 (init-statement-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 361 (init-statement-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "enum" reduce using rule 83 (attribute-specifier-seq-opt) "enum" [reduce using rule 361 (init-statement-opt)] "explicit" reduce using rule 83 (attribute-specifier-seq-opt) "explicit" [reduce using rule 361 (init-statement-opt)] "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 361 (init-statement-opt)] "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char" [reduce using rule 361 (init-statement-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 361 (init-statement-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 361 (init-statement-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 361 (init-statement-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 361 (init-statement-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 361 (init-statement-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 361 (init-statement-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 361 (init-statement-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 361 (init-statement-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 361 (init-statement-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 361 (init-statement-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 361 (init-statement-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 361 (init-statement-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 361 (init-statement-opt)] "static" reduce using rule 83 (attribute-specifier-seq-opt) "static" [reduce using rule 361 (init-statement-opt)] "thread_local" reduce using rule 83 (attribute-specifier-seq-opt) "thread_local" [reduce using rule 361 (init-statement-opt)] "mutable" reduce using rule 83 (attribute-specifier-seq-opt) "mutable" [reduce using rule 361 (init-statement-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1257 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 condition go to state 1294 condition-opt go to state 1295 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 1259 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 323 for-range-declaration → • attribute-specifier-seq-opt decl-specifier-seq declarator 324 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" 374 iteration-statement → "for" "(" init-statement-opt • for-range-declaration ":" for-range-initializer ")" statement $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1296 for-range-declaration go to state 1297
358 init-statement → simple-declaration • $default reduce using rule 358 (init-statement)
377 jump-statement → "return" expr-or-braced-init-list-opt ";" • $default reduce using rule 377 (jump-statement)
379 jump-statement → "goto" IDENTIFIER ";" • $default reduce using rule 379 (jump-statement)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 212 declaration-statement → • block-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 380 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 381 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 381 | attribute-specifier-seq-opt "case" constant-expression ":" • statement 382 | • attribute-specifier-seq-opt "default" ":" statement 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 676 statement → • labeled-statement 677 | • attribute-specifier-seq-opt expression-statement 678 | • attribute-specifier-seq-opt compound-statement 679 | • attribute-specifier-seq-opt selection-statement 680 | • attribute-specifier-seq-opt iteration-statement 681 | • attribute-specifier-seq-opt jump-statement 682 | • declaration-statement 683 | • attribute-specifier-seq-opt try-block 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 991 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 993 block-declaration go to state 994 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 995 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 996 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1298 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 279 expression → • assignment-expression 280 | • expression "," assignment-expression 284 expression-opt → • %empty [";"] 285 | • expression 286 expression-statement → • expression-opt ";" 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 332 function-specifier → • "virtual" 333 | • explicit-specifier 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 357 init-statement → • expression-statement 358 | • simple-declaration 359 | • alias-declaration 360 init-statement-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "alignas", "(", "&", "[", "co_await", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", INTEGER_LITERAL, "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 361 | • init-statement 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 640 selection-statement → "if" CONSTEXPR-opt "(" • init-statement-opt condition ")" statement 641 | "if" CONSTEXPR-opt "(" • init-statement-opt condition ")" statement "else" statement 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 238 "inline" shift, and go to state 151 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "+" shift, and go to state 243 "-" shift, and go to state 244 "using" shift, and go to state 1261 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "operator" shift, and go to state 251 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "constexpr" [reduce using rule 360 (init-statement-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 360 (init-statement-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 360 (init-statement-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "inline" [reduce using rule 360 (init-statement-opt)] "noexcept" [reduce using rule 360 (init-statement-opt)] "!" [reduce using rule 360 (init-statement-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 360 (init-statement-opt)] "this" [reduce using rule 360 (init-statement-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 360 (init-statement-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 360 (init-statement-opt)] "+" [reduce using rule 360 (init-statement-opt)] "-" [reduce using rule 360 (init-statement-opt)] ";" reduce using rule 284 (expression-opt) "alignas" reduce using rule 83 (attribute-specifier-seq-opt) "alignas" [reduce using rule 360 (init-statement-opt)] "(" [reduce using rule 360 (init-statement-opt)] "&" [reduce using rule 360 (init-statement-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 360 (init-statement-opt)] "co_await" [reduce using rule 360 (init-statement-opt)] BOOLEAN_LITERAL [reduce using rule 360 (init-statement-opt)] CHARACTER_LITERAL [reduce using rule 360 (init-statement-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 360 (init-statement-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 360 (init-statement-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 360 (init-statement-opt)] "operator" [reduce using rule 360 (init-statement-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 360 (init-statement-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 360 (init-statement-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 360 (init-statement-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 360 (init-statement-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 360 (init-statement-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 360 (init-statement-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 360 (init-statement-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "delete" [reduce using rule 360 (init-statement-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "enum" [reduce using rule 360 (init-statement-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 360 (init-statement-opt)] FLOATING_POINT_LITERAL [reduce using rule 360 (init-statement-opt)] "*" [reduce using rule 360 (init-statement-opt)] INTEGER_LITERAL [reduce using rule 360 (init-statement-opt)] "requires" [reduce using rule 360 (init-statement-opt)] "new" reduce using rule 19 (SCOPE-opt) "new" [reduce using rule 360 (init-statement-opt)] "~" [reduce using rule 360 (init-statement-opt)] "++" [reduce using rule 360 (init-statement-opt)] "--" [reduce using rule 360 (init-statement-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 360 (init-statement-opt)] "auto" [reduce using rule 722 (type-constraint-opt)] POINTER_LITERAL [reduce using rule 360 (init-statement-opt)] "dynamic_cast" [reduce using rule 360 (init-statement-opt)] "static_cast" [reduce using rule 360 (init-statement-opt)] "reinterpret_cast" [reduce using rule 360 (init-statement-opt)] "const_cast" [reduce using rule 360 (init-statement-opt)] "typeid" [reduce using rule 360 (init-statement-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char" [reduce using rule 360 (init-statement-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 360 (init-statement-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 360 (init-statement-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 360 (init-statement-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 360 (init-statement-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 360 (init-statement-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 360 (init-statement-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 360 (init-statement-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 360 (init-statement-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 360 (init-statement-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 360 (init-statement-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 360 (init-statement-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 360 (init-statement-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 360 (init-statement-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 360 (init-statement-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 360 (init-statement-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 360 (init-statement-opt)] STRING_LITERAL [reduce using rule 360 (init-statement-opt)] "throw" [reduce using rule 360 (init-statement-opt)] "sizeof" [reduce using rule 360 (init-statement-opt)] "alignof" [reduce using rule 360 (init-statement-opt)] USER_DEFINED_CHARACTER_LITERAL [reduce using rule 360 (init-statement-opt)] USER_DEFINED_FLOATING_POINT_LITERAL [reduce using rule 360 (init-statement-opt)] USER_DEFINED_INTEGER_LITERAL [reduce using rule 360 (init-statement-opt)] "co_yield" [reduce using rule 360 (init-statement-opt)] $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 alias-declaration go to state 1262 and-expression go to state 274 assignment-expression go to state 275 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 1263 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 decltype-specifier go to state 63 defining-type-specifier go to state 65 delete-expression go to state 283 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 equality-expression go to state 284 exclusive-or-expression go to state 285 explicit-specifier go to state 155 expression go to state 1129 expression-opt go to state 1130 expression-statement go to state 1264 floating-point-literal go to state 287 fold-expression go to state 288 function-specifier go to state 79 id-expression go to state 289 inclusive-or-expression go to state 290 init-statement go to state 1273 init-statement-opt go to state 1299 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-declaration go to state 1267 simple-template-id go to state 311 simple-type-specifier go to state 427 storage-class-specifier go to state 99 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 434 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
151 compound-statement → • "{" statement-seq-opt "}" 642 selection-statement → "if" NOT-opt "consteval" • compound-statement 643 | "if" NOT-opt "consteval" • compound-statement "else" statement "{" shift, and go to state 813 compound-statement go to state 1300
361 init-statement-opt → init-statement • $default reduce using rule 361 (init-statement-opt)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 154 condition → • expression 155 | • attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 644 selection-statement → "switch" "(" init-statement-opt • condition ")" statement 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1257 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 condition go to state 1301 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 1259 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
91 balanced-token → "(" balanced-token-seq-opt ")" • $default reduce using rule 91 (balanced-token)
92 balanced-token → "[" balanced-token-seq-opt "]" • $default reduce using rule 92 (balanced-token)
93 balanced-token → "{" balanced-token-seq-opt "}" • $default reduce using rule 93 (balanced-token)
409 mem-initializer → mem-initializer-id "(" expression-list-opt ")" • $default reduce using rule 409 (mem-initializer)
414 mem-initializer-list → mem-initializer-list "," mem-initializer ELLIPSIS-opt • $default reduce using rule 414 (mem-initializer-list)
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty [IDENTIFIER, "::", "typename", "alignas", "[", "class", "struct", "union", "const", "volatile", "decltype", "enum", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void"] 84 | • attribute-specifier-seq 261 exception-declaration → • attribute-specifier-seq-opt type-specifier-seq declarator 262 | • attribute-specifier-seq-opt type-specifier-seq abstract-declarator-opt 263 | • "..." 338 handler → "catch" "(" • exception-declaration ")" compound-statement "..." shift, and go to state 1302 $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1303 exception-declaration go to state 1304
341 handler-seq-opt → handler-seq • $default reduce using rule 341 (handler-seq-opt)
339 handler-seq → handler handler-seq-opt • $default reduce using rule 339 (handler-seq)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 564 parameters-and-qualifiers → "(" parameter-declaration-clause ")" cv-qualifier-seq-opt ref-qualifier-opt noexcept-specifier-opt attribute-specifier-seq-opt • [",", "...", "=", ";", "(", ")", "[", ":", "{", "final", "->", ">", "try", "requires", "override"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 564 (parameters-and-qualifiers)] $default reduce using rule 564 (parameters-and-qualifiers) alignment-specifier go to state 166 attribute-specifier go to state 167
429 member-declarator → IDENTIFIER-opt attribute-specifier-seq-opt ":" constant-expression brace-or-equal-initializer-opt • $default reduce using rule 429 (member-declarator)
609 pure-specifier → "=" • INTEGER_LITERAL INTEGER_LITERAL shift, and go to state 1233
139 class-name → • IDENTIFIER 140 | • simple-template-id 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 637 return-type-requirement → "->" • type-constraint 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "decltype" shift, and go to state 21 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] class-name go to state 55 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 133 nested-name-specifier-opt go to state 221 simple-template-id go to state 96 template-name go to state 102 type-constraint go to state 1305 type-name go to state 106 typedef-name go to state 108
639 return-type-requirement-opt → return-type-requirement • $default reduce using rule 639 (return-type-requirement-opt)
150 compound-requirement → "{" expression "}" NOEXCEPT-opt return-type-requirement-opt • ";" ";" shift, and go to state 1306
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 505 noptr-new-declarator → "[" expression-opt "]" attribute-specifier-seq-opt • [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 505 (noptr-new-declarator)] $default reduce using rule 505 (noptr-new-declarator) alignment-specifier go to state 166 attribute-specifier go to state 167
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty 84 | • attribute-specifier-seq 506 noptr-new-declarator → noptr-new-declarator "[" constant-expression "]" • attribute-specifier-seq-opt $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1307
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 139 class-name → • IDENTIFIER 140 | • simple-template-id 155 condition → attribute-specifier-seq-opt decl-specifier-seq • declarator brace-or-equal-initializer 213 declarator → • ptr-declarator 214 | • noptr-declarator parameters-and-qualifiers trailing-return-type 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator go to state 1308 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 212 declaration-statement → • block-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 371 iteration-statement → "while" "(" condition ")" • statement 380 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 381 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 382 | • attribute-specifier-seq-opt "default" ":" statement 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 676 statement → • labeled-statement 677 | • attribute-specifier-seq-opt expression-statement 678 | • attribute-specifier-seq-opt compound-statement 679 | • attribute-specifier-seq-opt selection-statement 680 | • attribute-specifier-seq-opt iteration-statement 681 | • attribute-specifier-seq-opt jump-statement 682 | • declaration-statement 683 | • attribute-specifier-seq-opt try-block 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 991 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 993 block-declaration go to state 994 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 995 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 996 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1309 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 372 iteration-statement → "do" statement "while" "(" • expression ")" ";" 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 1310 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
157 condition-opt → condition • $default reduce using rule 157 (condition-opt)
373 iteration-statement → "for" "(" init-statement condition-opt • ";" expression-opt ")" statement ";" shift, and go to state 1311
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 323 for-range-declaration → attribute-specifier-seq-opt • decl-specifier-seq declarator 324 | attribute-specifier-seq-opt • decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" 332 function-specifier → • "virtual" 333 | • explicit-specifier 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 1312 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 154 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109
374 iteration-statement → "for" "(" init-statement-opt for-range-declaration • ":" for-range-initializer ")" statement ":" shift, and go to state 1313
381 labeled-statement → attribute-specifier-seq-opt "case" constant-expression ":" statement • $default reduce using rule 381 (labeled-statement)
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "::", "typename", "virtual", "alignas", "[", "class", "struct", "union", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "enum", "explicit", "auto", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable"] 84 | • attribute-specifier-seq 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 154 condition → • expression 155 | • attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 640 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt • condition ")" statement 641 | "if" CONSTEXPR-opt "(" init-statement-opt • condition ")" statement "else" statement 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "[" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "delete" reduce using rule 19 (SCOPE-opt) "new" reduce using rule 19 (SCOPE-opt) "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 1257 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 condition go to state 1314 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 1259 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
642 selection-statement → "if" NOT-opt "consteval" compound-statement • ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "}", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "namespace", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "else", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 643 | "if" NOT-opt "consteval" compound-statement • "else" statement "else" shift, and go to state 1315 "else" [reduce using rule 642 (selection-statement)] $default reduce using rule 642 (selection-statement)
644 selection-statement → "switch" "(" init-statement-opt condition • ")" statement ")" shift, and go to state 1316
263 exception-declaration → "..." • $default reduce using rule 263 (exception-declaration)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 177 cv-qualifier → • "const" 178 | • "volatile" 216 decltype-specifier → • "decltype" "(" expression ")" 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 248 enum-name → • IDENTIFIER 261 exception-declaration → attribute-specifier-seq-opt • type-specifier-seq declarator 262 | attribute-specifier-seq-opt • type-specifier-seq abstract-declarator-opt 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 741 type-specifier-seq → • type-specifier attribute-specifier-seq-opt 742 | • type-specifier type-specifier-seq 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "typename" shift, and go to state 8 "alignas" shift, and go to state 158 "[" shift, and go to state 162 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "decltype" shift, and go to state 21 "enum" shift, and go to state 125 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] $default reduce using rule 722 (type-constraint-opt) alignment-specifier go to state 166 attribute-specifier go to state 167 class-key go to state 424 class-name go to state 55 cv-qualifier go to state 57 decltype-specifier go to state 63 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 placeholder-type-specifier go to state 94 simple-template-id go to state 96 simple-type-specifier go to state 97 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 432 type-specifier-seq go to state 1317 typedef-name go to state 108 typename-specifier go to state 109
338 handler → "catch" "(" exception-declaration • ")" compound-statement ")" shift, and go to state 1318
637 return-type-requirement → "->" type-constraint • $default reduce using rule 637 (return-type-requirement)
150 compound-requirement → "{" expression "}" NOEXCEPT-opt return-type-requirement-opt ";" • $default reduce using rule 150 (compound-requirement)
45 alignment-specifier → • "alignas" "(" type-id ELLIPSIS-opt ")" 46 | • "alignas" "(" constant-expression ELLIPSIS-opt ")" 80 attribute-specifier → • "[" "[" attribute-using-prefix-opt attribute-list "]" "]" 81 | • alignment-specifier 82 attribute-specifier-seq → attribute-specifier-seq-opt • attribute-specifier 506 noptr-new-declarator → noptr-new-declarator "[" constant-expression "]" attribute-specifier-seq-opt • [",", "...", "+", "-", "=", ";", "(", ")", "&", "*=", "/=", "%=", "+=", "-=", ">>=", "<<=", "&=", "^=", "|=", "[", "]", ":", "{", "}", "<=>", "?", "&&", "||", "==", "!=", "^", "<", ">", "*", "/", "%", "|", "<<", ">>", "<=", ">=", ".*", "->*"] "alignas" shift, and go to state 158 "[" shift, and go to state 162 "[" [reduce using rule 506 (noptr-new-declarator)] $default reduce using rule 506 (noptr-new-declarator) alignment-specifier go to state 166 attribute-specifier go to state 167
117 brace-or-equal-initializer → • "=" initializer-clause 118 | • braced-init-list 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 155 condition → attribute-specifier-seq-opt decl-specifier-seq declarator • brace-or-equal-initializer "=" shift, and go to state 396 "{" shift, and go to state 398 brace-or-equal-initializer go to state 1319 braced-init-list go to state 401
371 iteration-statement → "while" "(" condition ")" statement • $default reduce using rule 371 (iteration-statement)
280 expression → expression • "," assignment-expression 372 iteration-statement → "do" statement "while" "(" expression • ")" ";" "," shift, and go to state 552 ")" shift, and go to state 1320
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 279 expression → • assignment-expression 280 | • expression "," assignment-expression 284 expression-opt → • %empty [")"] 285 | • expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 373 iteration-statement → "for" "(" init-statement condition-opt ";" • expression-opt ")" statement 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] ")" reduce using rule 284 (expression-opt) "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expression go to state 1129 expression-opt go to state 1321 floating-point-literal go to state 287 fold-expression go to state 288 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 139 class-name → • IDENTIFIER 140 | • simple-template-id 213 declarator → • ptr-declarator 214 | • noptr-declarator parameters-and-qualifiers trailing-return-type 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 323 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq • declarator 324 | attribute-specifier-seq-opt decl-specifier-seq • ref-qualifier-opt "[" identifier-list "]" 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 614 ref-qualifier → • "&" 615 | • "&&" 616 ref-qualifier-opt → • %empty ["["] 617 | • ref-qualifier 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 156 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 159 "&" shift, and go to state 1322 "&&" shift, and go to state 1323 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "[" reduce using rule 616 (ref-qualifier-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 class-name go to state 55 declarator go to state 1324 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-declarator go to state 173 ptr-declarator go to state 174 ptr-operator go to state 175 ref-qualifier go to state 359 ref-qualifier-opt go to state 1325 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
19 SCOPE-opt → • %empty ["delete", "new"] 20 | • "::" 41 additive-expression → • multiplicative-expression 42 | • additive-expression "+" multiplicative-expression 43 | • additive-expression "-" multiplicative-expression 47 and-expression → • equality-expression 48 | • and-expression "&" equality-expression 50 assignment-expression → • conditional-expression 51 | • yield-expression 52 | • throw-expression 53 | • logical-or-expression assignment-operator initializer-clause 90 await-expression → • "co_await" cast-expression 116 boolean-literal → • BOOLEAN_LITERAL 121 braced-init-list → • "{" initializer-list COMMA-opt "}" 122 | • "{" designated-initializer-list COMMA-opt "}" 123 | • "{" "}" 130 cast-expression → • unary-expression 131 | • "(" type-id ")" cast-expression 132 character-literal → • CHARACTER_LITERAL 139 class-name → • IDENTIFIER 140 | • simple-template-id 148 compare-expression → • shift-expression 149 | • compare-expression "<=>" shift-expression 158 conditional-expression → • logical-or-expression 159 | • logical-or-expression "?" expression ":" assignment-expression 171 conversion-function-id → • "operator" conversion-type-id 216 decltype-specifier → • "decltype" "(" expression ")" 224 delete-expression → • SCOPE-opt "delete" cast-expression 225 | • SCOPE-opt "delete" "[" "]" cast-expression 248 enum-name → • IDENTIFIER 258 equality-expression → • relational-expression 259 | • equality-expression "==" relational-expression 260 | • equality-expression "!=" relational-expression 264 exclusive-or-expression → • and-expression 265 | • exclusive-or-expression "^" and-expression 275 expr-or-braced-init-list → • expression 276 | • braced-init-list 279 expression → • assignment-expression 280 | • expression "," assignment-expression 287 floating-point-literal → • FLOATING_POINT_LITERAL 288 fold-expression → • "(" cast-expression fold-operator "..." ")" 289 | • "(" "..." fold-operator cast-expression ")" 290 | • "(" cast-expression fold-operator "..." fold-operator cast-expression ")" 325 for-range-initializer → • expr-or-braced-init-list 343 id-expression → • unqualified-id 344 | • qualified-id 347 inclusive-or-expression → • exclusive-or-expression 348 | • inclusive-or-expression "|" exclusive-or-expression 370 integer-literal → • INTEGER_LITERAL 374 iteration-statement → "for" "(" init-statement-opt for-range-declaration ":" • for-range-initializer ")" statement 390 lambda-expression → • lambda-introducer lambda-declarator compound-statement 391 | • lambda-introducer "<" template-parameter-list ">" requires-clause-opt lambda-declarator compound-statement 392 lambda-introducer → • "[" lambda-capture-opt "]" 396 literal → • integer-literal 397 | • character-literal 398 | • floating-point-literal 399 | • string-literal 400 | • boolean-literal 401 | • pointer-literal 402 | • user-defined-literal 403 literal-operator-id → • "operator" string-literal IDENTIFIER 404 | • "operator" user-defined-string-literal 405 logical-and-expression → • inclusive-or-expression 406 | • logical-and-expression "&&" inclusive-or-expression 407 logical-or-expression → • logical-and-expression 408 | • logical-or-expression "||" logical-and-expression 450 multiplicative-expression → • pm-expression 451 | • multiplicative-expression "*" pm-expression 452 | • multiplicative-expression "/" pm-expression 453 | • multiplicative-expression "%" pm-expression 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 477 new-expression → • SCOPE-opt "new" new-placement-opt new-type-id new-initializer-opt 478 | • SCOPE-opt "new" new-placement-opt "(" type-id ")" new-initializer-opt 488 noexcept-expression → • "noexcept" "(" expression ")" 508 operator-function-id → • "operator" overloadable-operator 509 | • "operator" overloadable-operator "<" template-argument-list-opt ">" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 567 pm-expression → • cast-expression 568 | • pm-expression ".*" cast-expression 569 | • pm-expression "->*" cast-expression 570 pointer-literal → • POINTER_LITERAL 571 postfix-expression → • primary-expression 572 | • postfix-expression "[" expression-list-opt "]" 573 | • postfix-expression "(" expression-list-opt ")" 574 | • simple-type-specifier "(" expression-list-opt ")" 575 | • typename-specifier "(" expression-list-opt ")" 576 | • simple-type-specifier braced-init-list 577 | • typename-specifier braced-init-list 578 | • postfix-expression "." TEMPLATE-opt id-expression 579 | • postfix-expression "->" TEMPLATE-opt id-expression 580 | • postfix-expression "++" 581 | • postfix-expression "--" 582 | • "dynamic_cast" "<" type-id ">" "(" expression ")" 583 | • "static_cast" "<" type-id ">" "(" expression ")" 584 | • "reinterpret_cast" "<" type-id ">" "(" expression ")" 585 | • "const_cast" "<" type-id ">" "(" expression ")" 586 | • "typeid" "(" expression ")" 587 | • "typeid" "(" type-id ")" 588 primary-expression → • literal 589 | • string-literal 590 | • "this" 591 | • "(" expression ")" 592 | • id-expression 593 | • lambda-expression 594 | • fold-expression 595 | • requires-expression 612 qualified-id → • nested-name-specifier TEMPLATE-opt unqualified-id 618 relational-expression → • compare-expression 619 | • relational-expression "<" compare-expression 620 | • relational-expression ">" compare-expression 621 | • relational-expression "<=" compare-expression 622 | • relational-expression ">=" compare-expression 636 requires-expression → • "requires" requirement-parameter-list-opt requirement-body 645 shift-expression → • additive-expression 646 | • shift-expression "<<" additive-expression 647 | • shift-expression ">>" additive-expression 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 694 string-literal → • STRING_LITERAL 705 template-id → • simple-template-id 706 | • operator-function-id "<" template-argument-list-opt ">" 707 | • literal-operator-id "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 713 throw-expression → • "throw" assignment-expression-opt 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 748 unary-expression → • postfix-expression 749 | • unary-operator cast-expression 750 | • "++" cast-expression 751 | • "--" cast-expression 752 | • await-expression 753 | • "sizeof" unary-expression 754 | • "sizeof" "(" type-id ")" 755 | • "sizeof" "..." "(" IDENTIFIER ")" 756 | • "alignof" "(" type-id ")" 757 | • noexcept-expression 758 | • new-expression 759 | • delete-expression 760 unary-operator → • "*" 761 | • "&" 762 | • "+" 763 | • "-" 764 | • "!" 765 | • "~" 767 unqualified-id → • IDENTIFIER 768 | • operator-function-id 769 | • conversion-function-id 770 | • literal-operator-id 771 | • "~" type-name 772 | • "~" decltype-specifier 773 | • template-id 774 user-defined-character-literal → • USER_DEFINED_CHARACTER_LITERAL 775 user-defined-floating-point-literal → • USER_DEFINED_FLOATING_POINT_LITERAL 776 user-defined-integer-literal → • USER_DEFINED_INTEGER_LITERAL 777 user-defined-literal → • user-defined-integer-literal 778 | • user-defined-floating-point-literal 779 | • user-defined-string-literal 780 | • user-defined-character-literal 781 user-defined-string-literal → • string-literal ud-suffix 794 yield-expression → • "co_yield" assignment-expression 795 | • "co_yield" braced-init-list IDENTIFIER shift, and go to state 238 "noexcept" shift, and go to state 239 "!" shift, and go to state 240 "::" shift, and go to state 241 "this" shift, and go to state 242 "typename" shift, and go to state 8 "+" shift, and go to state 243 "-" shift, and go to state 244 "(" shift, and go to state 245 "&" shift, and go to state 246 "[" shift, and go to state 247 "co_await" shift, and go to state 248 "{" shift, and go to state 398 BOOLEAN_LITERAL shift, and go to state 249 CHARACTER_LITERAL shift, and go to state 250 "operator" shift, and go to state 251 "decltype" shift, and go to state 21 FLOATING_POINT_LITERAL shift, and go to state 252 "*" shift, and go to state 253 INTEGER_LITERAL shift, and go to state 254 "requires" shift, and go to state 255 "~" shift, and go to state 256 "++" shift, and go to state 257 "--" shift, and go to state 258 POINTER_LITERAL shift, and go to state 259 "dynamic_cast" shift, and go to state 260 "static_cast" shift, and go to state 261 "reinterpret_cast" shift, and go to state 262 "const_cast" shift, and go to state 263 "typeid" shift, and go to state 264 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 STRING_LITERAL shift, and go to state 118 "throw" shift, and go to state 265 "sizeof" shift, and go to state 266 "alignof" shift, and go to state 267 USER_DEFINED_CHARACTER_LITERAL shift, and go to state 268 USER_DEFINED_FLOATING_POINT_LITERAL shift, and go to state 269 USER_DEFINED_INTEGER_LITERAL shift, and go to state 270 "co_yield" shift, and go to state 271 IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "auto" reduce using rule 722 (type-constraint-opt) $default reduce using rule 19 (SCOPE-opt) SCOPE-opt go to state 272 additive-expression go to state 273 and-expression go to state 274 assignment-expression go to state 275 await-expression go to state 276 boolean-literal go to state 277 braced-init-list go to state 1198 cast-expression go to state 278 character-literal go to state 279 class-name go to state 55 compare-expression go to state 280 conditional-expression go to state 281 conversion-function-id go to state 282 decltype-specifier go to state 63 delete-expression go to state 283 enum-name go to state 71 equality-expression go to state 284 exclusive-or-expression go to state 285 expr-or-braced-init-list go to state 1326 expression go to state 1201 floating-point-literal go to state 287 fold-expression go to state 288 for-range-initializer go to state 1327 id-expression go to state 289 inclusive-or-expression go to state 290 integer-literal go to state 291 lambda-expression go to state 292 lambda-introducer go to state 293 literal go to state 294 literal-operator-id go to state 295 logical-and-expression go to state 296 logical-or-expression go to state 297 multiplicative-expression go to state 298 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 299 nested-name-specifier-opt go to state 90 new-expression go to state 300 noexcept-expression go to state 301 operator-function-id go to state 302 placeholder-type-specifier go to state 94 pm-expression go to state 303 pointer-literal go to state 304 postfix-expression go to state 305 primary-expression go to state 306 qualified-id go to state 307 relational-expression go to state 308 requires-expression go to state 309 shift-expression go to state 310 simple-template-id go to state 311 simple-type-specifier go to state 312 string-literal go to state 313 template-id go to state 314 template-name go to state 102 throw-expression go to state 315 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 typedef-name go to state 108 typename-specifier go to state 316 unary-expression go to state 317 unary-operator go to state 318 unqualified-id go to state 319 user-defined-character-literal go to state 320 user-defined-floating-point-literal go to state 321 user-defined-integer-literal go to state 322 user-defined-literal go to state 323 user-defined-string-literal go to state 324 yield-expression go to state 325
640 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition • ")" statement 641 | "if" CONSTEXPR-opt "(" init-statement-opt condition • ")" statement "else" statement ")" shift, and go to state 1328
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 212 declaration-statement → • block-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 380 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 381 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 382 | • attribute-specifier-seq-opt "default" ":" statement 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 643 selection-statement → "if" NOT-opt "consteval" compound-statement "else" • statement 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 676 statement → • labeled-statement 677 | • attribute-specifier-seq-opt expression-statement 678 | • attribute-specifier-seq-opt compound-statement 679 | • attribute-specifier-seq-opt selection-statement 680 | • attribute-specifier-seq-opt iteration-statement 681 | • attribute-specifier-seq-opt jump-statement 682 | • declaration-statement 683 | • attribute-specifier-seq-opt try-block 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 991 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 993 block-declaration go to state 994 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 995 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 996 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1329 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 212 declaration-statement → • block-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 380 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 381 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 382 | • attribute-specifier-seq-opt "default" ":" statement 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 644 selection-statement → "switch" "(" init-statement-opt condition ")" • statement 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 676 statement → • labeled-statement 677 | • attribute-specifier-seq-opt expression-statement 678 | • attribute-specifier-seq-opt compound-statement 679 | • attribute-specifier-seq-opt selection-statement 680 | • attribute-specifier-seq-opt iteration-statement 681 | • attribute-specifier-seq-opt jump-statement 682 | • declaration-statement 683 | • attribute-specifier-seq-opt try-block 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 991 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 993 block-declaration go to state 994 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 995 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 996 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1330 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
5 ELLIPSIS-opt → • %empty [IDENTIFIER, "::", "operator", "decltype", "~"] 6 | • "..." 29 abstract-declarator → • ptr-abstract-declarator 30 | • noptr-abstract-declarator-opt parameters-and-qualifiers trailing-return-type 31 | • abstract-pack-declarator 32 abstract-declarator-opt → • %empty [")"] 33 | • abstract-declarator 34 abstract-pack-declarator → • noptr-abstract-pack-declarator 35 | • ptr-operator abstract-pack-declarator 139 class-name → • IDENTIFIER 140 | • simple-template-id 213 declarator → • ptr-declarator 214 | • noptr-declarator parameters-and-qualifiers trailing-return-type 215 declarator-id → • ELLIPSIS-opt id-expression 216 decltype-specifier → • "decltype" "(" expression ")" 248 enum-name → • IDENTIFIER 261 exception-declaration → attribute-specifier-seq-opt type-specifier-seq • declarator 262 | attribute-specifier-seq-opt type-specifier-seq • abstract-declarator-opt 455 namespace-alias → • IDENTIFIER 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 493 noptr-abstract-declarator → • noptr-abstract-declarator-opt parameters-and-qualifiers 494 | • noptr-abstract-declarator-opt "[" constant-expression-opt "]" attribute-specifier-seq-opt 495 | • "(" ptr-abstract-declarator ")" 496 noptr-abstract-declarator-opt → • %empty ["(", "["] 497 | • noptr-abstract-declarator 498 noptr-abstract-pack-declarator → • noptr-abstract-pack-declarator parameters-and-qualifiers 499 | • noptr-abstract-pack-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 500 | • "..." 501 noptr-declarator → • declarator-id attribute-specifier-seq-opt 502 | • noptr-declarator parameters-and-qualifiers 503 | • noptr-declarator "[" constant-expression-opt "]" attribute-specifier-seq-opt 504 | • "(" ptr-declarator ")" 599 ptr-abstract-declarator → • noptr-abstract-declarator 600 | • ptr-operator ptr-abstract-declarator-opt 603 ptr-declarator → • noptr-declarator 604 | • ptr-operator ptr-declarator 605 ptr-operator → • "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 606 | • "&" attribute-specifier-seq-opt 607 | • "&&" attribute-specifier-seq-opt 608 | • nested-name-specifier "*" attribute-specifier-seq-opt cv-qualifier-seq-opt 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 708 template-name → • IDENTIFIER 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 743 typedef-name → • IDENTIFIER 744 | • simple-template-id "..." shift, and go to state 935 IDENTIFIER shift, and go to state 4 "::" shift, and go to state 6 "(" shift, and go to state 936 "&" shift, and go to state 160 "&&" shift, and go to state 163 "decltype" shift, and go to state 21 "*" shift, and go to state 164 IDENTIFIER [reduce using rule 5 (ELLIPSIS-opt)] "::" [reduce using rule 5 (ELLIPSIS-opt)] "(" [reduce using rule 496 (noptr-abstract-declarator-opt)] ")" reduce using rule 32 (abstract-declarator-opt) "[" reduce using rule 496 (noptr-abstract-declarator-opt) "decltype" [reduce using rule 5 (ELLIPSIS-opt)] $default reduce using rule 5 (ELLIPSIS-opt) ELLIPSIS-opt go to state 165 abstract-declarator go to state 704 abstract-declarator-opt go to state 1331 abstract-pack-declarator go to state 706 class-name go to state 55 declarator go to state 1332 declarator-id go to state 171 decltype-specifier go to state 121 enum-name go to state 71 namespace-alias go to state 85 namespace-name go to state 88 nested-name-specifier go to state 187 noptr-abstract-declarator go to state 707 noptr-abstract-declarator-opt go to state 708 noptr-abstract-pack-declarator go to state 709 noptr-declarator go to state 173 ptr-abstract-declarator go to state 710 ptr-declarator go to state 174 ptr-operator go to state 939 simple-template-id go to state 96 template-name go to state 102 type-name go to state 106 typedef-name go to state 108
151 compound-statement → • "{" statement-seq-opt "}" 338 handler → "catch" "(" exception-declaration ")" • compound-statement "{" shift, and go to state 813 compound-statement go to state 1333
155 condition → attribute-specifier-seq-opt decl-specifier-seq declarator brace-or-equal-initializer • $default reduce using rule 155 (condition)
372 iteration-statement → "do" statement "while" "(" expression ")" • ";" ";" shift, and go to state 1334
373 iteration-statement → "for" "(" init-statement condition-opt ";" expression-opt • ")" statement ")" shift, and go to state 1335
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", "alignas", "(", "&", "[", "&&", "operator", "decltype", "*", "~"] 84 | • attribute-specifier-seq 606 ptr-operator → "&" • attribute-specifier-seq-opt 614 ref-qualifier → "&" • ["["] "[" reduce using rule 83 (attribute-specifier-seq-opt) "[" [reduce using rule 614 (ref-qualifier)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 349
82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["...", IDENTIFIER, "::", "alignas", "(", "&", "[", "&&", "operator", "decltype", "*", "~"] 84 | • attribute-specifier-seq 607 ptr-operator → "&&" • attribute-specifier-seq-opt 615 ref-qualifier → "&&" • ["["] "[" reduce using rule 83 (attribute-specifier-seq-opt) "[" [reduce using rule 615 (ref-qualifier)] $default reduce using rule 83 (attribute-specifier-seq-opt) attribute-specifier-seq go to state 177 attribute-specifier-seq-opt go to state 352
323 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq declarator • $default reduce using rule 323 (for-range-declaration)
324 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt • "[" identifier-list "]" "[" shift, and go to state 1336
325 for-range-initializer → expr-or-braced-init-list • $default reduce using rule 325 (for-range-initializer)
374 iteration-statement → "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer • ")" statement ")" shift, and go to state 1337
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 212 declaration-statement → • block-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 380 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 381 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 382 | • attribute-specifier-seq-opt "default" ":" statement 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 640 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" • statement 641 | "if" CONSTEXPR-opt "(" init-statement-opt condition ")" • statement "else" statement 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 676 statement → • labeled-statement 677 | • attribute-specifier-seq-opt expression-statement 678 | • attribute-specifier-seq-opt compound-statement 679 | • attribute-specifier-seq-opt selection-statement 680 | • attribute-specifier-seq-opt iteration-statement 681 | • attribute-specifier-seq-opt jump-statement 682 | • declaration-statement 683 | • attribute-specifier-seq-opt try-block 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 991 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 993 block-declaration go to state 994 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 995 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 996 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1338 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
643 selection-statement → "if" NOT-opt "consteval" compound-statement "else" statement • $default reduce using rule 643 (selection-statement)
644 selection-statement → "switch" "(" init-statement-opt condition ")" statement • $default reduce using rule 644 (selection-statement)
262 exception-declaration → attribute-specifier-seq-opt type-specifier-seq abstract-declarator-opt • $default reduce using rule 262 (exception-declaration)
261 exception-declaration → attribute-specifier-seq-opt type-specifier-seq declarator • $default reduce using rule 261 (exception-declaration)
338 handler → "catch" "(" exception-declaration ")" compound-statement • $default reduce using rule 338 (handler)
372 iteration-statement → "do" statement "while" "(" expression ")" ";" • $default reduce using rule 372 (iteration-statement)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 212 declaration-statement → • block-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 373 iteration-statement → "for" "(" init-statement condition-opt ";" expression-opt ")" • statement 380 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 381 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 382 | • attribute-specifier-seq-opt "default" ":" statement 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 676 statement → • labeled-statement 677 | • attribute-specifier-seq-opt expression-statement 678 | • attribute-specifier-seq-opt compound-statement 679 | • attribute-specifier-seq-opt selection-statement 680 | • attribute-specifier-seq-opt iteration-statement 681 | • attribute-specifier-seq-opt jump-statement 682 | • declaration-statement 683 | • attribute-specifier-seq-opt try-block 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 991 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 993 block-declaration go to state 994 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 995 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 996 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1339 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
324 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" • identifier-list "]" 345 identifier-list → • IDENTIFIER 346 | • identifier-list "," IDENTIFIER IDENTIFIER shift, and go to state 865 identifier-list go to state 1340
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 212 declaration-statement → • block-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 374 iteration-statement → "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" • statement 380 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 381 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 382 | • attribute-specifier-seq-opt "default" ":" statement 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 676 statement → • labeled-statement 677 | • attribute-specifier-seq-opt expression-statement 678 | • attribute-specifier-seq-opt compound-statement 679 | • attribute-specifier-seq-opt selection-statement 680 | • attribute-specifier-seq-opt iteration-statement 681 | • attribute-specifier-seq-opt jump-statement 682 | • declaration-statement 683 | • attribute-specifier-seq-opt try-block 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 991 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 993 block-declaration go to state 994 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 995 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 996 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1341 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
640 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement • ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", "}", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "namespace", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "else", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static_assert", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 641 | "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement • "else" statement "else" shift, and go to state 1342 "else" [reduce using rule 640 (selection-statement)] $default reduce using rule 640 (selection-statement)
373 iteration-statement → "for" "(" init-statement condition-opt ";" expression-opt ")" statement • $default reduce using rule 373 (iteration-statement)
324 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list • "]" 346 identifier-list → identifier-list • "," IDENTIFIER "," shift, and go to state 1025 "]" shift, and go to state 1343
374 iteration-statement → "for" "(" init-statement-opt for-range-declaration ":" for-range-initializer ")" statement • $default reduce using rule 374 (iteration-statement)
44 alias-declaration → • "using" IDENTIFIER attribute-specifier-seq-opt "=" defining-type-id ";" 49 asm-declaration → • attribute-specifier-seq-opt "asm" "(" string-literal ")" ";" 82 attribute-specifier-seq → • attribute-specifier-seq-opt attribute-specifier 83 attribute-specifier-seq-opt → • %empty ["constexpr", "extern", IDENTIFIER, "inline", "noexcept", "!", "::", "this", "typename", "virtual", "+", "-", "using", ";", "alignas", "(", "&", "asm", "[", "co_await", "{", BOOLEAN_LITERAL, CHARACTER_LITERAL, "class", "struct", "union", "operator", "co_return", "const", "volatile", "friend", "typedef", "consteval", "constinit", "decltype", "delete", "enum", "explicit", FLOATING_POINT_LITERAL, "*", "default", "try", INTEGER_LITERAL, "while", "do", "for", "break", "continue", "return", "goto", "case", "requires", "new", "~", "++", "--", "auto", POINTER_LITERAL, "dynamic_cast", "static_cast", "reinterpret_cast", "const_cast", "typeid", "if", "switch", "char", "char8_t", "char16_t", "char32_t", "wchar_t", "bool", "short", "int", "long", "signed", "unsigned", "float", "double", "void", "static", "thread_local", "mutable", STRING_LITERAL, "throw", "sizeof", "alignof", USER_DEFINED_CHARACTER_LITERAL, USER_DEFINED_FLOATING_POINT_LITERAL, USER_DEFINED_INTEGER_LITERAL, "co_yield"] 84 | • attribute-specifier-seq 107 block-declaration → • simple-declaration 108 | • asm-declaration 109 | • namespace-alias-definition 110 | • using-declaration 111 | • using-enum-declaration 112 | • using-directive 113 | • static_assert-declaration 114 | • alias-declaration 115 | • opaque-enum-declaration 133 class-head → • class-key attribute-specifier-seq-opt class-head-name class-virt-specifier-opt base-clause-opt 134 | • class-key attribute-specifier-seq-opt base-clause-opt 136 class-key → • "class" 137 | • "struct" 138 | • "union" 139 class-name → • IDENTIFIER 140 | • simple-template-id 144 class-specifier → • class-head "{" member-specification-opt "}" 177 cv-qualifier → • "const" 178 | • "volatile" 182 decl-specifier → • storage-class-specifier 183 | • defining-type-specifier 184 | • function-specifier 185 | • "friend" 186 | • "typedef" 187 | • "constexpr" 188 | • "consteval" 189 | • "constinit" 190 | • "inline" 191 decl-specifier-seq → • decl-specifier attribute-specifier-seq-opt 192 | • decl-specifier decl-specifier-seq 212 declaration-statement → • block-declaration 216 decltype-specifier → • "decltype" "(" expression ")" 219 defining-type-specifier → • type-specifier 220 | • class-specifier 221 | • enum-specifier 230 elaborated-enum-specifier → • "enum" nested-name-specifier-opt IDENTIFIER 231 elaborated-type-specifier → • class-key attribute-specifier-seq-opt nested-name-specifier-opt IDENTIFIER 232 | • class-key simple-template-id 233 | • class-key nested-name-specifier TEMPLATE-opt simple-template-id 234 | • elaborated-enum-specifier 241 enum-head → • enum-key attribute-specifier-seq-opt enum-head-name-opt enum-base-opt 245 enum-key → • "enum" 246 | • "enum" "class" 247 | • "enum" "struct" 248 enum-name → • IDENTIFIER 249 enum-specifier → • enum-head "{" enumerator-list-opt "}" 250 | • enum-head "{" enumerator-list "," "}" 268 explicit-specifier → • "explicit" "(" constant-expression ")" 269 | • "explicit" 332 function-specifier → • "virtual" 333 | • explicit-specifier 380 labeled-statement → • attribute-specifier-seq-opt IDENTIFIER ":" statement 381 | • attribute-specifier-seq-opt "case" constant-expression ":" statement 382 | • attribute-specifier-seq-opt "default" ":" statement 455 namespace-alias → • IDENTIFIER 456 namespace-alias-definition → • "namespace" IDENTIFIER "=" qualified-namespace-specifier ";" 461 namespace-name → • IDENTIFIER 462 | • namespace-alias 463 nested-name-specifier → • "::" 464 | • type-name "::" 465 | • namespace-name "::" 466 | • decltype-specifier "::" 467 | • nested-name-specifier IDENTIFIER "::" 468 | • nested-name-specifier TEMPLATE-opt simple-template-id "::" 469 nested-name-specifier-opt → • %empty [IDENTIFIER] 470 | • nested-name-specifier 507 opaque-enum-declaration → • enum-key attribute-specifier-seq-opt enum-head-name enum-base-opt ";" 565 placeholder-type-specifier → • type-constraint-opt "auto" 566 | • type-constraint-opt "decltype" "(" "auto" ")" 641 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" • statement 652 simple-declaration → • decl-specifier-seq init-declarator-list-opt ";" 653 | • attribute-specifier-seq decl-specifier-seq init-declarator-list ";" 654 | • attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" initializer ";" 656 simple-template-id → • template-name "<" template-argument-list-opt ">" 657 simple-type-specifier → • nested-name-specifier-opt type-name 658 | • nested-name-specifier "template" simple-template-id 659 | • decltype-specifier 660 | • placeholder-type-specifier 661 | • nested-name-specifier-opt template-name 662 | • "char" 663 | • "char8_t" 664 | • "char16_t" 665 | • "char32_t" 666 | • "wchar_t" 667 | • "bool" 668 | • "short" 669 | • "int" 670 | • "long" 671 | • "signed" 672 | • "unsigned" 673 | • "float" 674 | • "double" 675 | • "void" 676 statement → • labeled-statement 677 | • attribute-specifier-seq-opt expression-statement 678 | • attribute-specifier-seq-opt compound-statement 679 | • attribute-specifier-seq-opt selection-statement 680 | • attribute-specifier-seq-opt iteration-statement 681 | • attribute-specifier-seq-opt jump-statement 682 | • declaration-statement 683 | • attribute-specifier-seq-opt try-block 688 static_assert-declaration → • "static_assert" "(" constant-expression ")" ";" 689 | • "static_assert" "(" constant-expression "," string-literal ")" ";" 690 storage-class-specifier → • "static" 691 | • "thread_local" 692 | • "extern" 693 | • "mutable" 708 template-name → • IDENTIFIER 720 type-constraint → • nested-name-specifier-opt concept-name 721 | • nested-name-specifier-opt concept-name "<" template-argument-list-opt ">" 722 type-constraint-opt → • %empty ["decltype", "auto"] 723 | • type-constraint 725 type-name → • class-name 726 | • enum-name 727 | • typedef-name 737 type-specifier → • simple-type-specifier 738 | • elaborated-type-specifier 739 | • typename-specifier 740 | • cv-qualifier 743 typedef-name → • IDENTIFIER 744 | • simple-template-id 745 typename-specifier → • "typename" nested-name-specifier IDENTIFIER 746 | • "typename" nested-name-specifier TEMPLATE-opt simple-template-id 782 using-declaration → • "using" using-declarator-list ";" 786 using-directive → • attribute-specifier-seq-opt "using" "namespace" nested-name-specifier-opt namespace-name ";" 787 using-enum-declaration → • "using" elaborated-enum-specifier ";" "constexpr" shift, and go to state 1 "extern" shift, and go to state 150 IDENTIFIER shift, and go to state 4 "inline" shift, and go to state 151 "::" shift, and go to state 6 "typename" shift, and go to state 8 "virtual" shift, and go to state 9 "using" shift, and go to state 10 "class" shift, and go to state 12 "struct" shift, and go to state 13 "union" shift, and go to state 14 "const" shift, and go to state 15 "volatile" shift, and go to state 16 "friend" shift, and go to state 17 "typedef" shift, and go to state 18 "consteval" shift, and go to state 19 "constinit" shift, and go to state 20 "decltype" shift, and go to state 21 "enum" shift, and go to state 22 "explicit" shift, and go to state 23 "namespace" shift, and go to state 991 "char" shift, and go to state 27 "char8_t" shift, and go to state 28 "char16_t" shift, and go to state 29 "char32_t" shift, and go to state 30 "wchar_t" shift, and go to state 31 "bool" shift, and go to state 32 "short" shift, and go to state 33 "int" shift, and go to state 34 "long" shift, and go to state 35 "signed" shift, and go to state 36 "unsigned" shift, and go to state 37 "float" shift, and go to state 38 "double" shift, and go to state 39 "void" shift, and go to state 40 "static_assert" shift, and go to state 41 "static" shift, and go to state 42 "thread_local" shift, and go to state 43 "mutable" shift, and go to state 44 "constexpr" [reduce using rule 83 (attribute-specifier-seq-opt)] "extern" [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 83 (attribute-specifier-seq-opt)] IDENTIFIER [reduce using rule 469 (nested-name-specifier-opt)] "inline" [reduce using rule 83 (attribute-specifier-seq-opt)] "::" [reduce using rule 83 (attribute-specifier-seq-opt)] "typename" [reduce using rule 83 (attribute-specifier-seq-opt)] "virtual" [reduce using rule 83 (attribute-specifier-seq-opt)] "using" [reduce using rule 83 (attribute-specifier-seq-opt)] "class" [reduce using rule 83 (attribute-specifier-seq-opt)] "struct" [reduce using rule 83 (attribute-specifier-seq-opt)] "union" [reduce using rule 83 (attribute-specifier-seq-opt)] "const" [reduce using rule 83 (attribute-specifier-seq-opt)] "volatile" [reduce using rule 83 (attribute-specifier-seq-opt)] "friend" [reduce using rule 83 (attribute-specifier-seq-opt)] "typedef" [reduce using rule 83 (attribute-specifier-seq-opt)] "consteval" [reduce using rule 83 (attribute-specifier-seq-opt)] "constinit" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 83 (attribute-specifier-seq-opt)] "decltype" [reduce using rule 722 (type-constraint-opt)] "enum" [reduce using rule 83 (attribute-specifier-seq-opt)] "explicit" [reduce using rule 83 (attribute-specifier-seq-opt)] "auto" reduce using rule 83 (attribute-specifier-seq-opt) "auto" [reduce using rule 722 (type-constraint-opt)] "char" [reduce using rule 83 (attribute-specifier-seq-opt)] "char8_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char16_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "char32_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "wchar_t" [reduce using rule 83 (attribute-specifier-seq-opt)] "bool" [reduce using rule 83 (attribute-specifier-seq-opt)] "short" [reduce using rule 83 (attribute-specifier-seq-opt)] "int" [reduce using rule 83 (attribute-specifier-seq-opt)] "long" [reduce using rule 83 (attribute-specifier-seq-opt)] "signed" [reduce using rule 83 (attribute-specifier-seq-opt)] "unsigned" [reduce using rule 83 (attribute-specifier-seq-opt)] "float" [reduce using rule 83 (attribute-specifier-seq-opt)] "double" [reduce using rule 83 (attribute-specifier-seq-opt)] "void" [reduce using rule 83 (attribute-specifier-seq-opt)] "static" [reduce using rule 83 (attribute-specifier-seq-opt)] "thread_local" [reduce using rule 83 (attribute-specifier-seq-opt)] "mutable" [reduce using rule 83 (attribute-specifier-seq-opt)] $default reduce using rule 83 (attribute-specifier-seq-opt) alias-declaration go to state 47 asm-declaration go to state 48 attribute-specifier-seq go to state 992 attribute-specifier-seq-opt go to state 993 block-declaration go to state 994 class-head go to state 53 class-key go to state 54 class-name go to state 55 class-specifier go to state 56 cv-qualifier go to state 57 decl-specifier go to state 58 decl-specifier-seq go to state 59 declaration-statement go to state 995 decltype-specifier go to state 63 defining-type-specifier go to state 65 elaborated-enum-specifier go to state 66 elaborated-type-specifier go to state 67 enum-head go to state 69 enum-key go to state 70 enum-name go to state 71 enum-specifier go to state 72 explicit-specifier go to state 155 function-specifier go to state 79 labeled-statement go to state 996 namespace-alias go to state 85 namespace-alias-definition go to state 86 namespace-name go to state 88 nested-name-specifier go to state 89 nested-name-specifier-opt go to state 90 opaque-enum-declaration go to state 93 placeholder-type-specifier go to state 94 simple-declaration go to state 95 simple-template-id go to state 96 simple-type-specifier go to state 97 statement go to state 1344 static_assert-declaration go to state 98 storage-class-specifier go to state 99 template-name go to state 102 type-constraint go to state 104 type-constraint-opt go to state 105 type-name go to state 106 type-specifier go to state 107 typedef-name go to state 108 typename-specifier go to state 109 using-declaration go to state 111 using-directive go to state 112 using-enum-declaration go to state 113
324 for-range-declaration → attribute-specifier-seq-opt decl-specifier-seq ref-qualifier-opt "[" identifier-list "]" • $default reduce using rule 324 (for-range-declaration)
641 selection-statement → "if" CONSTEXPR-opt "(" init-statement-opt condition ")" statement "else" statement • $default reduce using rule 641 (selection-statement)